{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Fuzzbench-2020-05-11-analysis.ipynb",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "code",
      "metadata": {
        "id": "XU_tfiktT9Ms",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import numpy as np\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "sns.set(color_codes=True)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "J2XHseWNUAWm",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "!pip install scikit_posthocs orange3\n",
        "!git clone https://github.com/google/fuzzbench.git\n",
        "\n",
        "import sys\n",
        "sys.path.append(\"fuzzbench\")\n",
        "from analysis import data_utils"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "TTWgAJBcUC_k",
        "colab_type": "code",
        "colab": {},
        "cellView": "both"
      },
      "source": [
        "#@title Report data source\n",
        "report_directory = \"2020-05-11\"  #@param [\"2020-05-11\", \"2020-04-21\", \"202-04-14\", \"2020-05-20-aflplusplus-2\"] {allow-input: true}\n",
        "data_url = f\"https://www.fuzzbench.com/reports/{report_directory}/data.csv.gz\"\n",
        "df = pd.read_csv(data_url)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "rKrC323bUQb3",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "exp_snapshot_df = data_utils.get_experiment_snapshots(df)\n",
        "exp_pivot_df = data_utils.experiment_pivot_table(exp_snapshot_df, data_utils.benchmark_rank_by_median)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UY73exieBJMa",
        "colab_type": "text"
      },
      "source": [
        "# Median Edge Coverage "
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "l9DlehCMBM1W",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 731
        },
        "outputId": "f5c6ce3f-ee70-465c-8eb5-cfff9c8720b0"
      },
      "source": [
        "exp_snapshot_df.pivot_table(index='benchmark', columns='fuzzer', values='edges_covered', aggfunc='median')"
      ],
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th>fuzzer</th>\n",
              "      <th>afl</th>\n",
              "      <th>aflfast</th>\n",
              "      <th>aflplusplus</th>\n",
              "      <th>aflsmart</th>\n",
              "      <th>eclipser</th>\n",
              "      <th>entropic</th>\n",
              "      <th>fairfuzz</th>\n",
              "      <th>fastcgs_lm</th>\n",
              "      <th>honggfuzz</th>\n",
              "      <th>lafintel</th>\n",
              "      <th>libfuzzer</th>\n",
              "      <th>mopt</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>benchmark</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>bloaty_fuzz_target</th>\n",
              "      <td>5486</td>\n",
              "      <td>5177</td>\n",
              "      <td>5205</td>\n",
              "      <td>5426</td>\n",
              "      <td>4220</td>\n",
              "      <td>4807</td>\n",
              "      <td>5023</td>\n",
              "      <td>5667</td>\n",
              "      <td>5511</td>\n",
              "      <td>4971</td>\n",
              "      <td>4466</td>\n",
              "      <td>5648</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>curl_curl_fuzzer_http</th>\n",
              "      <td>5421</td>\n",
              "      <td>5320</td>\n",
              "      <td>5370</td>\n",
              "      <td>5430</td>\n",
              "      <td>4424</td>\n",
              "      <td>5001</td>\n",
              "      <td>4846</td>\n",
              "      <td>5405</td>\n",
              "      <td>5409</td>\n",
              "      <td>5320</td>\n",
              "      <td>4777</td>\n",
              "      <td>5386</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>freetype2-2017</th>\n",
              "      <td>5377</td>\n",
              "      <td>5225</td>\n",
              "      <td>5148</td>\n",
              "      <td>5303</td>\n",
              "      <td>4510</td>\n",
              "      <td>5591</td>\n",
              "      <td>5348</td>\n",
              "      <td>5335</td>\n",
              "      <td>7167</td>\n",
              "      <td>5138</td>\n",
              "      <td>4395</td>\n",
              "      <td>5372</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>harfbuzz-1.3.2</th>\n",
              "      <td>4282</td>\n",
              "      <td>4182</td>\n",
              "      <td>4111</td>\n",
              "      <td>4262</td>\n",
              "      <td>3383</td>\n",
              "      <td>4235</td>\n",
              "      <td>3621</td>\n",
              "      <td>4268</td>\n",
              "      <td>4368</td>\n",
              "      <td>4099</td>\n",
              "      <td>4107</td>\n",
              "      <td>4254</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>jsoncpp_jsoncpp_fuzzer</th>\n",
              "      <td>634</td>\n",
              "      <td>634</td>\n",
              "      <td>632</td>\n",
              "      <td>634</td>\n",
              "      <td>588</td>\n",
              "      <td>635</td>\n",
              "      <td>634</td>\n",
              "      <td>634</td>\n",
              "      <td>635</td>\n",
              "      <td>630</td>\n",
              "      <td>635</td>\n",
              "      <td>634</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>lcms-2017-03-21</th>\n",
              "      <td>1109</td>\n",
              "      <td>910</td>\n",
              "      <td>1131</td>\n",
              "      <td>1167</td>\n",
              "      <td>492</td>\n",
              "      <td>1309</td>\n",
              "      <td>1159</td>\n",
              "      <td>851</td>\n",
              "      <td>1008</td>\n",
              "      <td>1119</td>\n",
              "      <td>1211</td>\n",
              "      <td>896</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>libjpeg-turbo-07-2017</th>\n",
              "      <td>1444</td>\n",
              "      <td>1437</td>\n",
              "      <td>1436</td>\n",
              "      <td>1442</td>\n",
              "      <td>1048</td>\n",
              "      <td>1453</td>\n",
              "      <td>1109</td>\n",
              "      <td>1438</td>\n",
              "      <td>1434</td>\n",
              "      <td>1419</td>\n",
              "      <td>1365</td>\n",
              "      <td>1439</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>libpcap_fuzz_both</th>\n",
              "      <td>21</td>\n",
              "      <td>21</td>\n",
              "      <td>21</td>\n",
              "      <td>18</td>\n",
              "      <td>880</td>\n",
              "      <td>1736</td>\n",
              "      <td>21</td>\n",
              "      <td>19</td>\n",
              "      <td>1953</td>\n",
              "      <td>1721</td>\n",
              "      <td>1592</td>\n",
              "      <td>21</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>libpng-1.2.56</th>\n",
              "      <td>631</td>\n",
              "      <td>629</td>\n",
              "      <td>630</td>\n",
              "      <td>674</td>\n",
              "      <td>512</td>\n",
              "      <td>647</td>\n",
              "      <td>633</td>\n",
              "      <td>525</td>\n",
              "      <td>677</td>\n",
              "      <td>644</td>\n",
              "      <td>630</td>\n",
              "      <td>525</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>libxml2-v2.9.2</th>\n",
              "      <td>4665</td>\n",
              "      <td>4381</td>\n",
              "      <td>4169</td>\n",
              "      <td>4673</td>\n",
              "      <td>1680</td>\n",
              "      <td>4522</td>\n",
              "      <td>3445</td>\n",
              "      <td>3839</td>\n",
              "      <td>4564</td>\n",
              "      <td>4288</td>\n",
              "      <td>4287</td>\n",
              "      <td>3602</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>mbedtls_fuzz_dtlsclient</th>\n",
              "      <td>1674</td>\n",
              "      <td>1601</td>\n",
              "      <td>1657</td>\n",
              "      <td>1689</td>\n",
              "      <td>1413</td>\n",
              "      <td>1632</td>\n",
              "      <td>1663</td>\n",
              "      <td>1687</td>\n",
              "      <td>1680</td>\n",
              "      <td>1593</td>\n",
              "      <td>1605</td>\n",
              "      <td>1673</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>openssl_x509</th>\n",
              "      <td>4076</td>\n",
              "      <td>4073</td>\n",
              "      <td>4077</td>\n",
              "      <td>4076</td>\n",
              "      <td>4056</td>\n",
              "      <td>4077</td>\n",
              "      <td>4054</td>\n",
              "      <td>4077</td>\n",
              "      <td>4070</td>\n",
              "      <td>4070</td>\n",
              "      <td>4069</td>\n",
              "      <td>4075</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>openthread-2019-12-23</th>\n",
              "      <td>1727</td>\n",
              "      <td>1690</td>\n",
              "      <td>1710</td>\n",
              "      <td>1734</td>\n",
              "      <td>1672</td>\n",
              "      <td>1539</td>\n",
              "      <td>1139</td>\n",
              "      <td>1715</td>\n",
              "      <td>1729</td>\n",
              "      <td>1524</td>\n",
              "      <td>1536</td>\n",
              "      <td>1713</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>php_php-fuzz-parser</th>\n",
              "      <td>11209</td>\n",
              "      <td>11118</td>\n",
              "      <td>11143</td>\n",
              "      <td>11229</td>\n",
              "      <td>9888</td>\n",
              "      <td>11069</td>\n",
              "      <td>10961</td>\n",
              "      <td>11332</td>\n",
              "      <td>11495</td>\n",
              "      <td>10979</td>\n",
              "      <td>10231</td>\n",
              "      <td>11207</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>proj4-2017-08-14</th>\n",
              "      <td>2153</td>\n",
              "      <td>2036</td>\n",
              "      <td>2149</td>\n",
              "      <td>2149</td>\n",
              "      <td>177</td>\n",
              "      <td>2355</td>\n",
              "      <td>2048</td>\n",
              "      <td>1964</td>\n",
              "      <td>3279</td>\n",
              "      <td>2102</td>\n",
              "      <td>2255</td>\n",
              "      <td>1997</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>re2-2014-12-09</th>\n",
              "      <td>2272</td>\n",
              "      <td>2269</td>\n",
              "      <td>2262</td>\n",
              "      <td>2272</td>\n",
              "      <td>1956</td>\n",
              "      <td>2296</td>\n",
              "      <td>2268</td>\n",
              "      <td>2249</td>\n",
              "      <td>2296</td>\n",
              "      <td>2257</td>\n",
              "      <td>2303</td>\n",
              "      <td>2252</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>sqlite3_ossfuzz</th>\n",
              "      <td>17246</td>\n",
              "      <td>16656</td>\n",
              "      <td>16652</td>\n",
              "      <td>17297</td>\n",
              "      <td>5620</td>\n",
              "      <td>11199</td>\n",
              "      <td>8805</td>\n",
              "      <td>17714</td>\n",
              "      <td>12617</td>\n",
              "      <td>11898</td>\n",
              "      <td>8629</td>\n",
              "      <td>17248</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>systemd_fuzz-link-parser</th>\n",
              "      <td>990</td>\n",
              "      <td>986</td>\n",
              "      <td>982</td>\n",
              "      <td>989</td>\n",
              "      <td>936</td>\n",
              "      <td>982</td>\n",
              "      <td>904</td>\n",
              "      <td>989</td>\n",
              "      <td>1002</td>\n",
              "      <td>981</td>\n",
              "      <td>968</td>\n",
              "      <td>989</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>vorbis-2017-12-11</th>\n",
              "      <td>1010</td>\n",
              "      <td>999</td>\n",
              "      <td>988</td>\n",
              "      <td>1014</td>\n",
              "      <td>892</td>\n",
              "      <td>1007</td>\n",
              "      <td>1001</td>\n",
              "      <td>1014</td>\n",
              "      <td>998</td>\n",
              "      <td>979</td>\n",
              "      <td>790</td>\n",
              "      <td>1014</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>woff2-2016-05-06</th>\n",
              "      <td>1046</td>\n",
              "      <td>968</td>\n",
              "      <td>1046</td>\n",
              "      <td>1044</td>\n",
              "      <td>835</td>\n",
              "      <td>1046</td>\n",
              "      <td>950</td>\n",
              "      <td>1034</td>\n",
              "      <td>1118</td>\n",
              "      <td>1022</td>\n",
              "      <td>1007</td>\n",
              "      <td>1077</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>zlib_zlib_uncompress_fuzzer</th>\n",
              "      <td>330</td>\n",
              "      <td>326</td>\n",
              "      <td>329</td>\n",
              "      <td>330</td>\n",
              "      <td>315</td>\n",
              "      <td>338</td>\n",
              "      <td>331</td>\n",
              "      <td>329</td>\n",
              "      <td>334</td>\n",
              "      <td>329</td>\n",
              "      <td>335</td>\n",
              "      <td>329</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "fuzzer                         afl  aflfast  ...  libfuzzer   mopt\n",
              "benchmark                                    ...                  \n",
              "bloaty_fuzz_target            5486     5177  ...       4466   5648\n",
              "curl_curl_fuzzer_http         5421     5320  ...       4777   5386\n",
              "freetype2-2017                5377     5225  ...       4395   5372\n",
              "harfbuzz-1.3.2                4282     4182  ...       4107   4254\n",
              "jsoncpp_jsoncpp_fuzzer         634      634  ...        635    634\n",
              "lcms-2017-03-21               1109      910  ...       1211    896\n",
              "libjpeg-turbo-07-2017         1444     1437  ...       1365   1439\n",
              "libpcap_fuzz_both               21       21  ...       1592     21\n",
              "libpng-1.2.56                  631      629  ...        630    525\n",
              "libxml2-v2.9.2                4665     4381  ...       4287   3602\n",
              "mbedtls_fuzz_dtlsclient       1674     1601  ...       1605   1673\n",
              "openssl_x509                  4076     4073  ...       4069   4075\n",
              "openthread-2019-12-23         1727     1690  ...       1536   1713\n",
              "php_php-fuzz-parser          11209    11118  ...      10231  11207\n",
              "proj4-2017-08-14              2153     2036  ...       2255   1997\n",
              "re2-2014-12-09                2272     2269  ...       2303   2252\n",
              "sqlite3_ossfuzz              17246    16656  ...       8629  17248\n",
              "systemd_fuzz-link-parser       990      986  ...        968    989\n",
              "vorbis-2017-12-11             1010      999  ...        790   1014\n",
              "woff2-2016-05-06              1046      968  ...       1007   1077\n",
              "zlib_zlib_uncompress_fuzzer    330      326  ...        335    329\n",
              "\n",
              "[21 rows x 12 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 16
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-vDxAu6rAX36",
        "colab_type": "text"
      },
      "source": [
        "# Current Fuzzbench default report ranking\n",
        "- use the mean edges covered per benchmark\n",
        "- rank each fuzzer by their mean ranking for all benchmarks"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Q6tBoeQIUc-V",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 255
        },
        "outputId": "e488e222-dc84-41d4-d320-4e2691912a0e"
      },
      "source": [
        "default_report_rank = data_utils.experiment_level_ranking(\n",
        "    exp_snapshot_df, \n",
        "    data_utils.benchmark_rank_by_mean, \n",
        "    data_utils.experiment_rank_by_average_rank)\n",
        "default_report_rank"
      ],
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "fuzzer\n",
              "honggfuzz       3.309524\n",
              "afl             3.952381\n",
              "aflsmart        4.119048\n",
              "entropic        4.761905\n",
              "fastcgs_lm      6.023810\n",
              "mopt            6.047619\n",
              "aflplusplus     6.833333\n",
              "aflfast         7.452381\n",
              "lafintel        7.904762\n",
              "libfuzzer       7.928571\n",
              "fairfuzz        8.476190\n",
              "eclipser       11.190476\n",
              "Name: average rank, dtype: float64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 5
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "IJvhkGUQASca",
        "colab_type": "text"
      },
      "source": [
        "## Other ranking measures\n",
        "`exp_pivot_df` is the result of using the median coverage as a benchmark ranking algorithm\n",
        "- Number of firsts (best median coverage for a benchmark)\n",
        "- Percent coverage (median coverage / max coverage per benchmark)\n",
        "- Average rank (simple mean of benchmark ranking)\n",
        "- Statistical tests wins (only count cases where the coverage improvement was statistically significant (p_value < 0.05))"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "3i4q40FKUgc8",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 255
        },
        "outputId": "ae90369a-47fe-4e83-9500-557f0d59e412"
      },
      "source": [
        "firsts_ranked = data_utils.experiment_rank_by_num_firsts(exp_pivot_df)\n",
        "firsts_ranked"
      ],
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "fuzzer\n",
              "honggfuzz      8.0\n",
              "aflsmart       4.0\n",
              "entropic       3.0\n",
              "fastcgs_lm     2.0\n",
              "libfuzzer      1.0\n",
              "mopt           0.0\n",
              "lafintel       0.0\n",
              "fairfuzz       0.0\n",
              "eclipser       0.0\n",
              "aflplusplus    0.0\n",
              "aflfast        0.0\n",
              "afl            0.0\n",
              "Name: number of wins, dtype: float64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "o8PIVfiXUjLl",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 255
        },
        "outputId": "686b3b1b-e0c5-40f8-a8a7-733619a75c57"
      },
      "source": [
        "percent_coverage = data_utils.experiment_rank_by_average_normalized_score(exp_pivot_df)\n",
        "percent_coverage"
      ],
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "fuzzer\n",
              "honggfuzz      97.018742\n",
              "entropic       92.400031\n",
              "aflsmart       90.725944\n",
              "lafintel       90.410083\n",
              "afl            90.248494\n",
              "aflplusplus    88.693044\n",
              "fastcgs_lm     87.601417\n",
              "mopt           87.521381\n",
              "aflfast        87.497333\n",
              "libfuzzer      87.071347\n",
              "fairfuzz       81.420302\n",
              "eclipser       71.055928\n",
              "Name: average normalized score, dtype: float64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 7
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "UopoysyHUmsr",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 255
        },
        "outputId": "47ba79e3-2a6b-47a3-a933-fe56fd8b0ba7"
      },
      "source": [
        "average_rank = data_utils.experiment_rank_by_average_rank(exp_pivot_df)\n",
        "average_rank"
      ],
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "fuzzer\n",
              "honggfuzz       3.285714\n",
              "aflsmart        3.976190\n",
              "afl             4.095238\n",
              "entropic        4.666667\n",
              "fastcgs_lm      5.785714\n",
              "mopt            5.976190\n",
              "aflplusplus     6.857143\n",
              "aflfast         7.523810\n",
              "libfuzzer       7.785714\n",
              "lafintel        8.309524\n",
              "fairfuzz        8.452381\n",
              "eclipser       11.285714\n",
              "Name: average rank, dtype: float64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 8
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "4BRwl9V2Up9M",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 255
        },
        "outputId": "cc9eb2fe-dc38-4d2c-ea53-dd7b0d3c29cb"
      },
      "source": [
        "stats_wins = data_utils.experiment_level_ranking(\n",
        "    exp_snapshot_df,\n",
        "    data_utils.benchmark_rank_by_stat_test_wins,\n",
        "    data_utils.experiment_rank_by_average_rank\n",
        ")\n",
        "stats_wins"
      ],
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "fuzzer\n",
              "honggfuzz       3.166667\n",
              "afl             3.904762\n",
              "aflsmart        4.357143\n",
              "entropic        4.761905\n",
              "fastcgs_lm      5.738095\n",
              "mopt            5.904762\n",
              "aflplusplus     6.904762\n",
              "aflfast         7.642857\n",
              "libfuzzer       7.738095\n",
              "lafintel        8.166667\n",
              "fairfuzz        8.452381\n",
              "eclipser       11.261905\n",
              "Name: average rank, dtype: float64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 9
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-uWcg_CAAiA_",
        "colab_type": "text"
      },
      "source": [
        "# Ranking comparison chart"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "dpIJvgZZUtQ3",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 481
        },
        "outputId": "2d782e27-e89f-4a1c-b331-dcf9a08fe61e"
      },
      "source": [
        "rankings = {\n",
        "    \"Default Ranking (mean coverage)\": default_report_rank,\n",
        "    \"Stats Wins (p_value wins)\": stats_wins,\n",
        "    \"% Coverage Ranking\": percent_coverage,\n",
        "    \"Average Rank (median coverage)\": average_rank\n",
        "}\n",
        "\n",
        "fig, axes = plt.subplots(1,len(rankings), figsize=(30,7))\n",
        "for i, (title, ranking_series) in enumerate(rankings.items()):\n",
        "  ax = sns.barplot(x=ranking_series.values, y=ranking_series.index, ax=axes[i])\n",
        "  ax.set_title(title)\n",
        "  ax.set_ylabel(\"\")\n",
        "fig.suptitle(\"Comparison of Ranking Methods\")\n",
        "fig.show()"
      ],
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABt0AAAHQCAYAAADNmKUzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeZhcVZn48W9CWEQCkSSKoBAUfBVGxYVFHlEUB8UBRcWNXRFGRscFBNwGkRF/KIr7yqigLOKG44YgKigKKLuyvA5KEEQwhC1BIJDk98c5BUXTVd3V1d3VXfX9PE+edNe9deqcW9X13nPfc86dsXLlSiRJkiRJkiRJkiSN3cxeV0CSJEmSJEmSJEma7ky6SZIkSZIkSZIkSV0y6SZJkiRJkiRJkiR1yaSbJEmSJEmSJEmS1CWTbpIkSZIkSZIkSVKXTLpJkiRJkiRJkiRJXTLpJkmSJGlgRcQeEXFmr+vREBGPiIgfRsQdEfHtSX7tfSPi3BbbptRxGo2IOCIiThynsloeG0mSJElqmNXrCkiSJEma/iJid+Ag4MnAEuBS4KjMnNKJisw8CTip1/VoshvwGGBuZt4/dGNEHAG8D7gXuB+4Ejg4M8+byEpN5HGKiIXA+sD6mXlL0+OXAFsAG2fmwhHK2B44MTMfNxF1lCRJkqTRcKabJEmSpK5ExEHAJ4EPUxJGGwKfB17ey3qNJCKm4iDEjYA/DZdwa3JqZq4FzAN+CUzqjLgJci3w+sYvEfFUYM3eVUeSJEmSOjcVO5mSJEmSpomIWAc4EnhDZn6vadMP6z8iYnXgI8Br6rZvAYdl5r2NGUrAp4F3AcuBA4FllETePOBjmfnhWtYRwL/U/V4K/F997cvq9ncD+wOPBq4H3peZp9Vt+9ZtvwP2Br4QEdcAb8rM50bEDOBYYA9gDeA64PWZ+cfazs8AOwH/BI4DPpyZK2q5bwLOB/YDbgf+IzNPb3HMngJ8gTKL62/AezLzBxHxQeA9wIyI2BV4e2Z+pdWxz8z7I+Ik4L0RMT8zF0XEVsCngKcAdwPfBQ7KzGX1tVfW43swMJ8ye+2tmblymHoeAzwH+DfgFY3jNFI5EbEK8FFgH8qsx4/XY7dqm2TiNyjvyWfq7/sAXwc+1FSf1YGjKJ+j1YHTgHdSBpOeDqweEUvr7k+q/68WEV+v9f8rsE9mXljLG/Z9qNvmAl8DtgeuBs5oqkfLz0mLtkmSJEkaEM50kyRJktSN51ASD6e12ed9wDaU5MbTga2A9zdtX6+WsQFwOCWhtSfwLGA74L8iYuOm/V9Omd21LnAy8P2IWLVu+3N9zjrAB4ETI+KxTc/dGvgLZUbeUUPquSPwPErCZh1Kcmdx3faZ+tgTgOdTEkRvGFJuUpKEHwW+UpMzD1Hr+UPgTEpi8D+BkyIiMvMDlNmCp2bmWu0SbrWs1Wo9FgO31YeXUxJR8yjvzQ7Afwx56s7AlsDTahtfPKTcmRFxXN2+Y2be0aIKrcrZn5Kc3AJ4JrBru3ZU5wNrR8RTatLudZRkbLOjKe/NFsAm1M9LZt5VX+/GetzWyswb63NeBnwTmAP8APhsbWPL96E+73PAPcBjgTfWfw3tPieSJEmSBphJN0mSJEndmAvcMsJyiHsAR2bmPzJzESUZtlfT9vso93+7j5IgmQd8KjOXZOYVlPuWPb1p/4sy8zt1/2MpCbttADLz25l5Y2auyMxTKTPhtmp67o2Z+ZnMvD8z7x5Sz/uA2ZT70s3IzKsy8+9NSaD31DotpMzeam7DdZl5XGYuB06gJGseM8yx2AZYCzg6M5dl5i+AH9G0tOIovCYibqfMZNsf2K1x/DPzosw8v7ZvIfAlSpKw2dGZeXtm/pWyPOUWTdtWBU6hJDR3ycx/tqlHq3JeQ3n/bsjM2yjJstFozHb7V+Aqyuwz4IHZZQcA78zMWzNzCSVB+boRyjw3M39S35dv8ODnqOX7UN/vV1ETenUG2wlNZQ77ORllGyVJkiT1MZeXlCRJktSNxcC8iJjVJvG2PmUJvobr6mMPlFGTIlASSQA3N22/m5Igabi+8UNd3vGGRnkRsTdwELCg7tK499nDnjtUZv4iIj5LmeW0UUR8j7Lk5SMoyaihbdig6febmsr5Z50w1VznhvWB6zNzRZuyRvKtzNwzIuZRlo98FnA2QEQ8iZKIfDblnmizgIuGPP+mpp//OaSem1BnIzaWpGyjVTnr89Dj3PKYD/EN4FfAxpSlJZvNp7TnogcnozEDWKXDOq5R7+XX7n2YTzlu1w/ZBrT+nGTmnSO2UJIkSVJfc6abJEmSpG6cB9xL+yUEbwQ2avp9w/rYWD2+8UNEzAQeB9wYERtRlqZ8KzA3M+cAf6QkZxoedu+yZpn56cx8FrAZZfnAQ4BbKLObhrbhbw8vYUQ3Ao+v9e6qrMy8hTL764imJTS/QLkH2aaZuTbwXh7a/pFcRVk28/SmpRY79XfKe9Lw+FY7NsvM64BrKffq+96QzbdQkq+bZ+ac+m+dzGwk+tq+r8No9z4sAu4fUu8Nh9R1uM+JJEmSpAFn0k2SJEnSmNX7fR0OfC4ido2INSNi1YjYKSI+Wnc7BXh/RMyvs7MO5+H36+rEsyLilXXG0jsoSb/zgUdSki+LACLiDcC/jLbQiNgyIrau9/u6i3JPrxV1Ft63gKMiYnZN7h00xjZcQJlxdWg9TtsDu1CW1exYZiZwBnBofWg2cCewNCKeDBw4hjJPoSTrzoqIJ46hWt8C3h4RG0TEHOCwDp67H/DCep+25jqtoCRUPxERjwao5TfuI3czMDci1hnl67R8H+r7/T1KMnPNiNgM2KfxxFafkw7aKEmSJKlPmXSTJEmS1JXM/DglCfV+SsLrespss+/XXT4EXAhcDvwBuLg+Nlb/C7wWuI1yX7VXZuZ9mXkl5V5r51GSME8FftNBuWtTEju3UZYTXAwcU7f9JyXB8hfgXOBk4KudVrwu2bgLsBNl9tbngb0z8+pOy2pyDHBATUa9C9gdWFLbcupYCszME4AjgV9ExIIOn34ccCbl/b4E+All5tjydk+qr/vnzLywxebDgGuA8yPiTuAsIOrzrqYkd/8SEbdHxPotymi8zkjvw1spy2XeBBwPfK3p6e0+J5IkSZIG2IyVKztdhUOSJEmSeiMijgA2ycw9e10XjU5E7AR8MTM3GnFnSZIkSZrGZvW6ApIkSZKk/hERjwBeQJnt9hjgA8BpPa2UJEmSJE0Cl5eUJEmSJI2nGcAHKcsvXgJcRbmPnyRJkiT1NZeXlCRJkiRJkiRJkrrkTDdJkiRJkiRJkiSpSybdJEmSJEmSJEmSpC6ZdJMkSZIkSZIkSZK6ZNJNkiRJkiRJkiRJ6pJJN0mSJEmSJEmSJKlLJt0kSZIkSZIkSZKkLpl0kyRJkiRJkiRJkrpk0k2SJEmSJEmSJEnqkkk3SZIkSZIkSZIkqUsm3SRJkiRJkiRJkqQumXSTJEmSJEmSJEmSumTSTZIkSZIkSZIkSeqSSTdJkiRJkiRJkiSpSybdJEmSJEmSJEmSpC6ZdJMkSZIkSZIkSZK6ZNJNkiRJkiRJkiRJ6pJJN0mSJEmSJEmSJKlLJt0kSZIkSZIkSZKkLpl0kyRJkiRJkiRJkrpk0k2SJEmSJEmSJEnqkkk3SZIkSZIkSZIkqUsm3TQtRcSBEXFzRCyNiLldlrUwIl40XnXrRkScHRFvarHt9IjYZ4Jed/WIuDIiHjsR5Wt0IuK7EbFTr+shSd2KiPdGxP9MQLk9jVcRsW9EnNuL166vv11E5DiU87uI2Hw86iRJGjwRsTIiNmmxbWlEPGGy6yRJGrtO+zkRsVlEXBgRMyayXvW1joiIE+vPG9Y4s8pEv24/qf3oqyNifq/rMihm9boCGjwRsRB4DHA/sBy4Evg68OXMXDGK568KHAtsk5mXjXPdjgA2ycw92+yzkFL/5cBS4KfAWzNz6XjWZajMnMhkzAHArzLz7xP4GhrZR4AvAKf3uiKSpoaIeC7wUWBzSty5CnhHZv4+IvYF3pSZzx1lWQuAa4FVM/P+DutxBvCLzPxI/X0D4Abg3cM89tjM/HAn5XdgoONVZv4aiHEo6mPAkcCrxqEsSZpwEfFJYB/gauDVmXlDfXx3Sr/wbSM8fyvgCGBbYAVwDfCFzPzaRNa7V5pi/l31oVuAL2bm0RP92pm51kS/hiSNVkScDTwdWC8z7+1xdbpSr1m+D7iXck31SuDgzDyvB9X5b+BjmblyMl80M/8KGGc6lJn3RsRXgXcDB/e6PoPAmW7qlV0yczawEXA0cBjwlVE+9zHAGsAVE1S30dildia2AJ4BvKeHdRkPbwa+0etKTHURMaEDFTLzd8DaEfHsiXwdSdNDRKwN/Aj4DLAusAHwQUona7L9Cnhe0+/Po1z4HPrY/2XmTRNYD+PV+PgB8IKIWK/XFZGkkdSE2bOA9YBzKReMiIh1gEOA94/w/OcAvwDOATYB5gIHApO6wsRE9yVamFP7rbsB/xUR/9qDOkhST9QBCNsBK4GXTUD5vfheP7V+r88Dfgl8e7IrUFcdeQHw/cl+7X42CZ+nk4F9ImL1CX4d4Uw39Vhm3gH8ICJuAs6PiI9n5h/rF8BRwGuA1YHTgHcCjwcuqU+/PSJ+l5kvjIhPAa8E1gH+jzIL4NcAEXE8cENmvr/+vj1wYmY+rrkuEfES4L3AjIjYFfhzZj59hPrfVEf/b9FUzruB/YFHA9cD78vM0+q2fYE3AecD+wG3A/+RmQ+b2VSD2BnANzLzmDo658TM/J+RyomIjYETKAnBC4AE1hluBl9EbAg8oe7XeOx44J/AxpQTlMsoo+HfTRlhejPw+sy8pO6/PuWi8PMos/8+kZmfrtu2Aj4FPAW4G/gucFBmLqvbV1I6vQcD84GTKDMHHzZapk4fP6y2+dHAn4BdM/P6iNi2vs6T6uNvz8zfRsRrgUMy89lN5bwTeEFmvqzVZy0z7258Vmrb3gn8LCLeRrnguzXlO/Q3wJubRtu2PfYRsQ1lpuZmwHW1nmc3NfNs4N+AC4e2X9LAeRJAZp5Sf78bOBMgIp4CfBFYNSKWAvdn5pyI+DfgQ8ATgTuAr2TmEfX5v6r/3x4RAP8KLKIMetkCuA/4eWa+dpi6/Ao4JCJm1lnp2wGfBI4c8tivav2OoM4cbxptvy9lROSalDhxVN13K+Dztb13Aydl5kFDK9AmXt1T27sNcDGwd2Ze1+qgRsQXgLsy811Nj/0vcE5mHtsujg8pp9GuB2YONsfq+vsbKReE1wN+BxwwXN0i4gTg8sz8eNOMwbdm5uci4onA7ykd6+fRdA5TZ99/FtibMpDpp8A+mXlPRMwDjgeeS5nVcQXw/MxcUbdfBLyYErMkaSrbGDi3jtL+OdCY1XYUcExm3jnC848BTmjMzK4uopz/AxAR+1P6GetSEntvzswbRxEz2vWDjgD+hRKnXgYcFBGX075vtGMtbz1Kv2hzSn+wo7gyVGZeGBFXUOL9z2pZ36bE7kdQ+nsHZuYVddvxlFlyC2rbrgR2z8w/Dy27zso/BdgrM8+u/btNM/OakcoZqb2S1KW9KdfNLqBcy/p2vQZ0M/DczPwjQF1y76/ARpn5j4jYmdKnWkD53npzZl5e911IWaFoj/JrPBJ4F62vA65CWblkH2AJ8HHK996qmXl/HUByLPBSyjn714APZObydg2rzz0JeG9EzM/MReN8/e0Y4DnAv9Vrt83+Fbg4M+9p2n8h8DlgL0rf7JuUa6zHU/ojF1Bmqt9W9295baxeVzseeCbl/cum11lAUx8sIt4AHAo8jtK3/Uhmfqnuuz3lmt4nKDF+OfDeVrPcI2JdyvvzYkpsPCczd63bpv15QmbeEBG3UfrN5wx3DDR+nOmmKaHO8LmBctIPZfbbkyidgk0oo/sPz8w/Ub5QoIzae2H9+fd133UpmftvR8QaHdbhp8CHqaNGRkq4AUTE4ygjJK9pevjPtR3rUGYknBgPvffM1pSAMY8SeL8SQ9ZArgHmHOCzmXlMi5dvV87JlC/XuZRlVPZq04ynAn8ZZqmx11BGjc6jzKo4j3Ixcx7wHUpwJCJmAj+kdNQ2AHYA3hERL67lLKckrOZRAvYOwH8Mea2dgS2Bp9XXfTHDOwh4PeVkZG3gjcA/a2D8MfDp2uZjgR9Hud/fD0s1Y9OmcnanHCNo8Vlr2nc9yudqI8qyZjMpJ0EbARtSguBnm/ZveezrhdQfU07e1qWcmH03Hrqm8lWUpQ8k6U/A8og4ISJ2iohHNTZk5lWUWV/n1Zg1p266i9K5nENJ4B9YB5LAg7PS5tTnnEdJgp0JPIrSUflMi7r8jjIwofH99DzKRbtrhjz2q4c/9QHPpSyNuANweE0cQulUfCoz16Z00L7V4vmt4tUetR3zgEspnY92TgFe24iZ9bjuSOkYwshxfFQi4uWUjuYrKZ3aX9fXHs45wPb15+cDf+HB9+v5wK+z9RLcrwFeQrko/TRKchNKZ/qG+tqPqXVp7lAbbyRNF1cA20XEIygx5IooK0NEZp7c7okRsSalD/KdNvu8EPh/lO/Tx1Iu/jViQsuYMYp+EMDL62vPocSnln2jOljiO5RVVOZS+nrbNtWzk7gytI3bUC7sNfdbTwc2pVwkvpiHx8/XUeLgo+rzjhqm3JfUOrxqyEDCEcsZqb2SNA72pny3nQS8OCIeU5eY/B7l2lLDayhJkn9ExDOArwL/Tvlu+hJlskDz7KDXU/pac2rfpF3/YX/KdcMtKEmkXXmo4ylLRW5CGby9I2WQfVsRsVpt32Lgtvpw19ffImJmRBxXt+84TMINSr9suPtMv4qSkHsSsAslzryXErNmUgfNjOLa2MmUwTHzKP28fdocin/UNq0NvAH4REQ8s2n7epT3ZQPKAP7PNferh/gGZYDo5pTY+Ila3346T7APOEmc6aap5EZg3fpFdQDwtMy8FSAiPkz50h12GcfMPLHp149HxPspF/bG9Z5vTb5fR4isRVmq5ANNdWme2n1qRLwH2Ar43/rYdZl5HDwwsv3zlIthjeW4NqMku97TNLthOMOWUwPvlsAOdSTEuRHxgzblzKGMthnqtMy8qJZ/GmUm3dfr76cCb637bQnMz8wj6+9/qQH6dcAZjTKqhRHxJcoFxE82PX50Zt5OmX3xS8rJyE+HqdObgEMzsxHcL6v12YuypFljybFTosxI2yUzj6+jTF5PmZGxKfBkyknTaD5rKyijjBrLuTVGmlD3P4oypb8xC6Pdsd8T+Elm/qT+/rOIuJCSRGzMNFhCeU8kDbjMvLOOHj8MOA5YLyJ+AuyfmTe3eM7ZTb9eHhGnUL5zWy39cR9lEMH6dcbusDfPrrMLLgCeFxHXUWbw/iUift302Ga0HzH3wcy8G7gsIi6jnOxfVeuwSUTMy8xbKKMZh9MqXv04Mxsz7N4H3BERj8/M61uU82tK8qkxM283SvLyxtrWkeL4aL0Z+H81QdqIL++NiI2GmZVwDuX8ZSYl2fZR4L/qtufT/rh+ulH3iPghD86+v4/SKdwoM6+p7W62pG6XpCkty0oo36XEh6sp/ZD/Bfar5/y7UWYWvKX2KZo9inKhr929QPcAvpqZFwPU7/3b6mj6ljEjIramTT+oPnZeZjZi8N2Ui4gNQ/tGLwWuyMzv1Xp8mnIhsqGTuNJwS71QvAZl9P4D5wOZ+dXGz3W0/W0RsU7TBdbT6uBYosymOHZI2a+uddqpMVukhVbljNReSRqz2o/aCPhWZt4SEX+mDMD+BOWaz5co90ejPv6l+vMBwJcys7G6xgkR8V4eOjvo0819jRH6D6+hDDBsrI50NCWRQkQ8hvJdOKf2k+6KiE806tCiaa+JMhNvNmXVq1c1BiWOw/W3VSlJmlmU62nLWtRhDiXZN9RnGv3U2k/8Rz64QtZpjXbT5tpYrdOWwIvqdbhf1T7OsDLzx02/nhMRZ1Ji9sX1sfuAI+sx+kmUVWKCIX3OmiTdCZjbmI3Hg+93P50neM1xkph001SyAXArJRu/JnBRlOWvAGYAq7R6YkS8izJiYX3Kl93alFEBE2XXzDwrIp5PCdbzKMGOiNibMiNrQd23sdZywwP3usnMf9Y2Nt8EdA/KCMCWozFHKGcecGtm/rNp3+spS3MO5zZKsB6q+YLu3cP83qjzRsD6EdHcwV2FenEvIp5E6Vg9m/K+zuKhQeQhbaEsa9nqpqiPp4wgGmp9ykiTZtdRPlNQ3qOPA0dSTqa+X4/Zoxn5s7ZoyJT5NSknaS+hdOIBZkdZMmB92h/7jYBXR8QuTdtXpSbtGmVRP0uSVE+Y9wWIiCdTlsf4JA8dmfmAemJ/NGU0+2qU2Wnt1vk/lDJ68HdRlpr4ePNFuCEa93VbSFlaF0qS7g31sevbXPSD1t/1+1G+n6+OiGspybkfDfP8VvGqucO7NCJupXwfD5t0y8yVEfFNyjH8FSUuPDB4ZxRxfLQ2Aj4VER9vemwGJTY95Dhl5p8j4i5Kp3c7ynuyX5Tg9HzKTO5Whh7X9evPx1BmXJ9ZY9yXM/Popn2NN5Kmjcz8BA+OOH8L5ft7JuXC5DMoA1TeXf81u40yiO6xlITdcNbnwYtzjViyGNggMxe2iRlt+0HVQ2LRCH2jh8SuGq9uaHr6qONKk3mU/vHba91XBZbVvstRlMTZfMoxauzfSLqN1Ed7B/D1ERJu7coZqb2S1I19gDProD6o97OixJJfAmvWvtPNlHPwxnLyG1Hue/WfTWWtxoPn2PDw7/Z2/Yeh/ZLmnzeifC//vema1Myh5Q/xrSxL+M+jDAh/FuU2JeNx/W0TysDIrdok3GB8riO2uja2PnBbZt7VtO06WlzTjIidKBMhnkQ5dmsCf2jaZfGQlVJaXXN8POV63m3DbOun8wT7gJPEpJumhIjYkvIlcC5wC+XLePPM/Nsonrsd5aLhDpSM/4p64bCx1OJdlC+qhvXaFPewdYzbycxzoqxT/zFg14jYiDIbYQfKaIXlEXFpU11G4whKQufkiHhdjrCO8zD+TpkxuGZT8qdVwg3gcmDjiJg1zJJdo3E9cG1mbtpi+xco9+F7fWYuiYh3UEZ+jMX1lKXHhnbsbqQEl2Yb8uBonZ8B8yNiC0ogfGd9fDSftaGfiYMpo2K2znJPvy0o7ZvByMf+espay/u3aeNTmLgZmpKmscy8usacf68PDRezTqYsebtTlvt2fZIHO3wP2z8zb6IsedIYDXpWRPyqzowa6leU0XMLebCj8Bvgf+pj7ZaWbCkz/w94fZ3l9UrgOxExd0hHC1rHqwe+ZyNiLcoSJTeO8LKnUJJRR1OWa35FfX4ncbxRvzWBxv2Ems8xrgeOysyRlrtsOIcSH1fLzL9FxDmUCwOPoiyb2ZHMXEKJWQdHxL8Av4iI32fmz+suT6Ep2ShJ00GdFXAAZcmlXSj3w7wvIn5PSSw9RB1odx5lyatfDt1ePaQvEeX+PHOBRv9g2JjByP0geHjsbdc3+jtlqedGPWY0/07ncQWA2p88NiJeSVmi6pOUi4IvB15EieHrUC6idtJvfTXlFgc3ZOanOqlTNVJ7JWlMoixH/BpglYhoJJlWB+ZExNMz87KI+Bbl+tDNwI/quTM8+F37sCV1mzzw3T6K/sNDvut4+DWie4F5nV6Pq7P3DgAujIiTM/PvdH/97SrKfdlOj4gXZj6wytRQl9N+yceRtLw2Vo/noyLikU39wQ0Zpi8bZSb3dynLbP5vPR/4Pp3FsuY6rRsRc4aZNd9P5wlPoUxK0ATznm7qqYhYu06L/iZwYmb+Ics9S46jrMP76LrfBvHQNW+bzaasf7wImBURh1NmujVcSpmivG5ErEcZkdfKzcCCeuFvtD4J/GtEPB14JOULc1Gt9xsosw06cR+lA/NI4Osd1oU6y+BC4IiIWC0iGh3SVvvfQJlZt1WH9Wz4HbAkIg6LiEdExCoR8S81kQrl/bkTWFpnaRw4xteBcmH3vyNi04iYERFPi3Lftp8AT4qI3SNiVkS8lrLM2Y9qG++jzPQ4hnIx9mf18U4/a4323E2Zir8uD11adKRjfyKwS0S8uB6nNSJi+yj3Bmx4PmXda0kDLiKeHBEHN74jIuLxlI5hYymMm4HHRVlWuGE2ZYTePVFupL1707ZFlJHsT2h6jVc3fQfdRolhre4ddh5lKYo9qUm3OhJwUX1sTEm3iNgzys2/V/DgqLuH1aFNvHppRDy3Hof/Bs7P1ktLNsq6hDLw4n8oSyE3XnfUcTwzF1E6WnvW7/Q3UgaGNHwReE9EbF7LWiciXt2mWudQlkxrHMez6+/njmEADhGxc0RsUjtjd1DuD7CibluDMir2Z52WK0k9dixwRB3gdi2wZR1wsT3lfpjDORTYNyIOqX0HIuLpdWQ6lItlb4iILeoFvA8DF2TmQmgbM0bqBw2nXd/ox8BTI2LXiJgFvIWHDuboNK4MdTRwaI0BsykXehdTBo98uINyGm6kXGR+e0SMpY83Unslaax2pZz7bkaZxbYFJdnwa0qCBspgxddSVptqvj/occCbI2Lret3pkRHxbxEx3MwuGLn/8C3K9+QGETGHMjMbgJooO5OyzPzaUe6n9sQoq2qNqCbFzqDEORiH629ZbnPzXspgzCe22O1nwDNrPBmLltfGmq6rfbBeV3sura9pNlZ2WQTcH2XW245jqVB9L04HPh8Rj4qIVSOicY/tvjhPiHIvvXVpfTsHjSOTbuqVH0bEEkoW/n2UztMbmrYfRrmwdn5E3AmcRZldNJwzKDOa/kSZLnsPD52e+w3KzKGFlGB2apt6NZbgWhwRF7fZ7wH1otvXgcMz80rKiIHzKBdDn8qDS3CNWp3G/UrKvd6+2mnijXLS8BxKJ+pDlDbf22b/LwF7dVpPeGDk5M6Uk5hreTDQrFN3eRflou8SyslLu+M/kmMpJyxnUoLQV4BHZObiWoeDKW0+FNi5aRkBKCdRLwK+PWQEUSefNShJ1kdQ2nk+D7/3XMtjXy8CN25suojyOT2E+l1cA+/SrPc8kDTwllBGyl0QZenB8ykzfQ+u238BXAHcFBGN77v/oNy/cglwOOU7Eyij/SlLSf0mIm6PiG0o6+VfEDfSPh8AACAASURBVGVt+x8Ab8/MYS9a1pGGF1E6N80zjn9NudH0mJJulNndV9Q6fAp4XZZ7GgxnuHh1MmUAxK2URNKeo3zdRlx4oJM9hji+P+V7fDHlhtu/bSrrNOAjlJto30k5Zju1KescSiercRzPpVwIHetx3ZQS05ZS2vP5zGzM8tgFODvrveAkaTqIiBdS7ntzGkA9Z/4x5Zz6BZSk0sNk5m+BF9Z/f4myDPGXKQP3yMyzKPfR/C5lFPkTKfdbaTZczBipHzScln2j2nd5NeW+nospF4sv5MG+RKdxZagfUwbY7E/pv15HGTxyJWO8AJeZf6Uk3t4dEW/q8Llt2ytJXdgH+Fpm/jUzb2r8o6wIskeUlTMuoKxcsT5NA58z80LK9+RnKd+Z11CX+x/OKPoPx1GuYV1OmcH0E8rEgcagur0p/asr6+t9h87uu3wMcEAdSD4u198y8wTK8v+/iHLfsqHbb6b0RV8+xvLbXhujtGFrSv/uA5SYNVw5S4C3Ufq8t9Xn/WAsdar2okyEuBr4B3XSRh+dJ+wOnJDlXnmaYDNWruxoNT1J01BEnApcnZkfaLF9dUrw36GO7tA4GenYD9n3u8BX8sGbyUqSmgyNV1GW27whM9/f25pNLxFxAbBfjnwfHklSj9SBlzcAezQNmuhbg9ZeSYOpzsb6YmYOvUXKtBIRmwEnUO7/ZnKhBzqJm7UffRnwvMz8x2TUb9B5TzepD9UZU7dSRlLsSBlBMuzIT4A6ymGzyaldf+v02DfLzFdNYNUkadozXo2PzNy613WQJD1clGXuL6AsZ38I5b40fbsM1KC1V9LgiXJ/uRdQZrs9hjJz67SeVmoc1Bl+7ZZJ1AQYa9ys/egnT2zt1Mykm9Sf1gO+R7mx5w3AgXWNYU08j70k9VhEbEeL+2Nm5lqTXB1JkkbrOZSlqRpLje3aZsnlfjBo7ZU0eGYAH6QsE3g3Zanfw3taI01nxs1pwuUlJUmSJEmSJEmSpC45060zq1Omzv6dB294KUmaelah3Hz493gz9laMaZI0PRjT2jOeSdL0YDwbmTFNkqaHtjHNpFtntgR+3etKSJJGbTvg3F5XYooypknS9GJMG57xTJKmF+NZa8Y0SZpeho1pJt0683eA2267ixUrBmtZzrlz12Lx4qW9rsaks92DxXb3j5kzZ/CoRz0S6ve2hjWQMa0fP++jMYjtHsQ2g+3uR8a0EQ1kPOtEP/99dMtj057HpzWPTXvDHR/j2agMbEwbxL8p2zw4BrHd/d7mkWKaSbfOLAdYsWLlwAU/YCDbDLZ70NjuvuOSHK0NbEwbtPY2DGK7B7HNYLv7mDFteAMbzzrhsWnNY9Oex6c1j017bY6P8ay1gY5ptnkwDGKbYTDbPSBtHjammXQbg7lz1+p1FXpi/vzZva5CW8uX3cetd9zT62pI0rQyiDFtKsUzY5ckjY9BjGedmEqxb6rx2LTn8Wlt0I6N562TZ1Bj2lT9m/KzL6lTJt3GYPGJp7FiyV29roaGmH/gnoBBUJI6YUzrLWOXJI0P45kkTSzPWyePMW1q8bMvqVMze10BSZIkSZIkSZIkaboz6SZJkiRJkiRJkiR1yaSbJEmSJEmSJEmS1CWTbpIkSZIkSZIkSVKXTLpJkiRJkiRJkiRJXTLpJkmSJEmSJEmSJHXJpJskSZIkSZIkSZLUpVmj3TEiVgKzM3PpBNZntHX5ELAbsCgzt+t1fSRJ04sxTZLUL4xpkqR+YUyTJPWDUSfdppiDgQ0zc1GvKyJJUpeMaZKkfmFMkyT1C2OaJGlMOk26vS0iXgHMBQ7JzO8CRMRLgP8HrAIsAv49M6+JiO2BTwIXAM8BVgKvy8yr6vOOAl4LLAbOBnbIzGe32xYRvwbWAH4eEWcAVwA7Z+Zu9Xn7Nn6PiC8C29S6rwXMzcxHRcSFTW1fDzgvM1/R4bGQJE1vxjRJUr8wpkmS+oUxTZI0rXV6T7c7M3NLYC/g0wAR8WjgG8Aemfk04GTgpKbnbA58sW77FvD++rxdgJ2Bp1OC4qaNJ7Tb1jSle9vMPKRdZTPzzZm5BbAl8FfgiPr4s+vjLwPuAj7S4XGQJE1/xjRJUr8wpkmS+oUxTZI0rXWadPtm/f98YP2IWAPYGrgsM6+s274GbBERs+vvmZmXND3vifXnFwDfysy7MnMFcELT67TbNhZfAf6QmZ9qPBAR6wA/BA7NzPO7LF+SNP0Y0yRJ/cKYJknqF8Y0SdK01mnS7R6AzFxefx/N8pT3NP28fJTP6cT9PLQdazRvjIgjgbWBdzY9tirwXeCExjR1SdLAMaZJkvqFMU2S1C+MaZKkaa3TpNtwzgeeHhFPrr/vA1ySmUtGeN7ZwG4RsWZEzKRMGx/NtqGuAZ4WEatHxGrAbo0NdY3lFwO711ErDV8Grs7MY0dsnSRpkBjTJEn9wpgmSeoXxjRJ0rTR9ciPzFwUEXsBJ0fELMrNTPccxfN+EBHbApcDt1IC6KNG2jZMOedHxFmUm5reCFwGPLZu/kD9/7cRAbCk1m1f4I8RcWnd/svMfGA0iiRpMBnTJEn9wpgmSeoXxjRJ0nQyY+XKlT178YiYnZlL6oiS/wFuzMz3j7SthxYA1y4+8TRWLLmrx1XRUPMP3JNFi0Ya5NRhmfNnj3uZ04HtHiz92O6ZM2cwd+5aABsDCyfjNY1pGouJiF3Dvk4f/p2PZBDbDLa7HxnTRrQA45kkTbhOzluHi8u9iGdgTFP3JqrP1s/nr60MYpthMNvd720eKaaN9xrHnfp6RCwAHgFcBHx0lNskSZpqjGmSpH5hTJMk9QtjmiRpUvU06ZaZrxjLNkmSphpjmiSpXxjTJEn9wpgmSZpsM3tdAUmSJEmSJEmSJGm6M+kmSZIkSZIkSZIkdcmkmyRJkiRJkiRJktQlk26SJEmSJEmSJElSl0y6SZIkSZIkSZIkSV2a1esKTEdz93xFr6ugYSxfdl+vqyBJ044xrbeMXZI0PoxnkjSxPG+dPMa0qcXPvqROmXQbg8WLl7JixcpeV2NSzZ8/m0WLlvS6GpKkcTZoMc14Jkn9adDiWSeMfa15bNrz+LTmsdFEGsSY5t+UpH7i8pKSJEmSJEmSJElSl0y6SZIkSZIkSZIkSV0y6SZJkiRJkiRJkiR1yaSbJEmSJEmSJEmS1CWTbpIkSZIkSZIkSVKXZvW6AtPR3Llr9boKPTF//uxeV2HSLF92L7fesazX1ZCkCTeIMW1Q4pmxTNIgGcR41olBiX1j4bFpz+PT2nQ7Np4bTh+DGtOm299UN5Yvu7fXVZA0gUy6jcHfvnYgy5cs6nU1NIE2fNt3AE9GJfU/Y1r/MpZJGiTGM0lqz3PD6cOY1v/K36OkfuXykpIkSZIkSZIkSVKXTLpJkiRJkiRJkiRJXTLpJkmSJEmSJEmSJHXJpJskSZIkSZIkSZLUJZNukiRJkiRJkiRJUpdMukmSJEmSJEmSJEldMukmSZIkSZIkSZIkdWlWrysw2SLiQ8BuwCLgv4CPZeaze1srSZI6Z0yTJE20iJgDHJCZH52Aso8ErsjMU8e7bEnSYJoqfaSIWADsmJlfnuzXliT11iDOdDsY2C4zt+t1RSRJ6pIxTZI00eYAh7baGBFjHsiZmYebcJMkjbOe95FqbFwAHNCrOkiSeqdvZ7pFxElAAKsD1wBvBH4ArAH8PCLOAH7cuxpKkjQ6xjRJ0niJiK2Bo4G160OHA1cAFwJfAl4KrAnsl5nnAp8D5kTEpcA/M3PbiDgbuBTYBrg1InYBPgK8pJb5U+CwzFweEccD9wGbA/OAc4C3ZOayuu3CzPxsRKwGfLiWsRz4S2a+YuKOhCRpOuu0jxQRjwZOBh5THzorM98ZEfsCuwO3A08D/gb8J/AxYBPg98CembkyInYH3g6sVst4V2b+vJa/EPgm8ELgD5QYuXGNn9dk5m7jfxQkSVNRP890e3tmPjszn0rpRB7WNMpl28w8pId1kySpE8Y0SVLX6lKRXwR2z8xnATtTEm1zgLnAeZn5DOBIShIN4C3A7Zm5RWZu21TcE4DnZuZLKSP5twCeWf89g4eO7t8a2BHYDNiI4Uf+v6eW+czMfDqwf/ctliT1sU77SHsAf87Mp9bnHNm0bUvgoMx8MnA3JTm3OyVuPRXYoe53BrBNjZWvA04Y8hprZ+ZWmbkfJX5eWeOnCTdJGiB9O9MN2Dsi9qCMPnkk8Kce10eSpLEypkmSxsO2wMbA6RHReGwlpV+4NDN/VB87H/j4CGWdnJn3159fBByfmcsAIuJrwCuAL9Ttp2bm0rrtBOBVwGeHlLczcHCjjMy8pfPmSZIGSKd9pPOBd0bEMZRZ12c0bftNZt5Qf74EWJiZtwNExGWUGW9nAU8ETomIDSizuNeLiPUy86b63K+PQ7skSdNcX850i4jtgAOBl9TRK++nTC+XJGlaMaZJksbRDODyOuq+8e/xwC3AvU37LWfkAZpLJ6qSkiS1M5Y+UmaeR5mJfRGwF/DLps33NP28fJjfGzHxFODzmbk5ZWb3/UNe19goSerPpBtleZQ7gMURsTplXWdJkqYjY5okabz8Ftg0Il7QeCAitqQk41q5E1gzItol4c4C9omIVSNiVWAf4GdN218dEY+sZewF/GKYMn4EvKPe242ImDeqFkmSBlHHfaSI2Bi4MzO/CRwEPCsiOr0uOge4tv78Rsr95Fq5E1inw/IlSX2gX5NuPwX+TJlafg5wcW+rI0nSmBnTJEnjIjNvA14GfCAiLouIq4AjaJN0y8xbgZOAP0TEb1vs9mXgcsqSXJfUn49r2v574EzgKuD6uv9QRwMLgUsj4lLKveckSRrOWPpI2wMX1xhzOvDmzFzR4eu+A/h+RFxMuQ/p4jb7Xg5kRPwxIr7T4etIkqaxGStXrux1HaaTBcC1f/vagSxfsqjXddEE2vBt32HRoiXMnz+bRYuW9Lo6k852D5Z+bPfMmTOYO3ctKPetWdjb2kxZCzCm9bVGLIP+/DsfySC2GWx3P5ruMS0ijgcuzMyh93AbLwswnknSiJrPDSfacHF5usezSbIAY9pA2PBtJQ/br+evrfTzOXs7g9jufm/zSDGtX2e6SZIkSZIkSZIkSZNmpJtjS5IkSZI0Jpm5b6/rIEmSJEmTxZlukiRJkiRJkiRJUpdMukmSJEmSJEmSJEldMukmSZIkSZIkSZIkdcmkmyRJkiRJkiRJktQlk26SJEmSJEmSJElSl2b1ugLT0QZv+EKvq6AJtnzZvb2ugiRNCmNa/zKWSRokxjNJas9zw+nDmNb/li+7l1VWW73X1ZA0QUy6jcHixUtZsWJlr6sxqebPn82iRUt6XQ1J0jgbtJhmPJOk/jRo8awTxr7WPDbteXxa89hoIg1iTBvEv6n58026Sf3K5SUlSZIkSZIkSZKkLpl0kyRJkiRJkiRJkrpk0k2SJEmSJEmSJEnqkkk3SZIkSZIkSZIkqUuzel2B6Wju3LV6XYWemD9/dq+r0BPN7b5v2b3cfseyHtZGksbXIMY041l7xjpJ09EgxrNODGrsGw2PTXsen9am6rHxXG76G9SYNlX/piZSo83+3Ur9xaTbGJxz6r7cs/Qfva6GeuDF+/0EMAhK6h/GNA1lrJM0HRnPJKnwXG76M6YNHv9upf7i8pKSJEmSJEmSJElSl0y6SZIkSZIkSZIkSV0y6SZJkiRJkiRJkiR1yaSbJEmSJEmSJEmS1CWTbpIkSZIkSZIkSVKXTLpJkiRJkiRJkiRJXTLpJkmSJEmSJEmSJHXJpJskSZIkSZIkSZLUpVmT/YIR8SFgN2AR8F/AxzLz2T2oxwJgx8z88mS/tiSpPxjTJEn9wHgmSdL4mCoxVZLUO72Y6XYwsF1mbteD1wYgImYBC4ADelUHSVJfMKZJkvqB8UySpPHR85gqSeqtCZvpFhEnAQGsDlwDvBH4AbAG8POIOAP4cdP+jwZOBh5THzorM98ZEfsCuwO3A08D/gb8J/AxYBPg98CembkyInYH3g6sVst4V2b+vJa/EPgm8ELgD8A2wMYRcSlwTWbuNv5HQZLUD4xpkqR+YDyTJGl8dBpTJUmDYyJnur09M5+dmU8FrgAOaxrlsW1mHjJk/z2AP2fmU+tzjmzatiVwUGY+Gbib0vHbHdgMeCqwQ93vDGCbzHwG8DrghCGvsXZmbpWZ+wFvAa7MzC3szEmSRmBMkyT1A+OZJEnjo9OYKkkaEBN5T7e9I2IPyojGRwJ/GmH/84F3RsQxwDmUzlnDbzLzhvrzJcDCzLwdICIuo4ymPAt4InBKRGwA3AesFxHrZeZN9blfH4d2SZIGjzFNktQPjGeSJI2PTmOqJGlATMhMt4jYDjgQeEkd8fF+yvTqljLzPOAZwEXAXsAvmzbf0/Tz8mF+byQPTwE+n5mbA88E7h/yuks7bowkaaAZ0yRJ/cB4JknS+BhLTJUkDY6JWl5yDnAHsDgiVqesa9xWRGwM3JmZ3wQOAp4VEZ3Wbw5wbf35jZR1lVu5E1inw/IlSYPHmCZJ6gfGM0mSxkfHMVWSNDgmKun2U+DPlKnV5wAXj+I52wMX15tmnw68OTNXdPi67wC+HxEXA08AFrfZ93IgI+KPEfGdDl9HkjQ4jGmSpH5gPJMkaXyMJaZKkgbEjJUrV/a6DtPJAuDac07dl3uW/qPXdVEPvHi/n7Bo0ZJeV2PCzZ8/eyDaOZTt7h8zZ85g7ty1ADYGFva2NlPWAoxpGka/xLp+/G4bDdvdf4xpI1qA8UySHjAVzuWGi8vGs1FZgDFtIE2Fv9vJ0M/n7O0MYrv7vc0jxbSJmukmSZIkSZIkSZIkDQyTbpIkSZIkSZIkSVKXTLpJkiRJkiRJkiRJXTLpJkmSJEmSJEmSJHXJpJskSZIkSZIkSZLUJZNukiRJkiRJkiRJUpdMukmSJEmSJEmSJEldmtXrCkxHz3/t8b2ugnrkvmX39roKkjSujGkaylgnaToynklS4bnc9GdMGzz+3Ur9xaTbGCxevJQVK1b2uhqTav782SxatKTX1Zh0g9puSYNj0GLaoH6vD2q7JQ2OQYtnnTAGtOaxac/j05rHRhNpEGPaIP5NDWKbpUHh8pKSJEmSJEmSJElSl0y6SZIkSZIkSZIkSV0y6SZJkiRJkiRJkiR1yaSbJEmSJEmSJEmS1KVZva7AdDR37lq9rkJPzJ8/u9dV6ImJbPey++7hjtvvm7DyJWkkgxjTjGfjy1gmaSoYxHjWiUGNfaPhsWnP49PaVDs2npP1j0GNaVPtb2oyjGeb/Q6Qpg6TbmNw0vf2ZuldN/e6GuoD/77XGYABUVLvGNPULWOZpKnAeCZp0HlO1j+MaRoLvwOkqcPlJSVJkiRJkiRJkqQumXSTJEmSJEmSJEmSumTSTZIkSZIkSZIkSeqSSTdJkiRJkiRJkiSpSybdJEmSJEmSJEmSpC6ZdJMkSZIkSZIkSZK6ZNJNkiRJkiRJkiRJ6pJJN0mSJEmSJEmSJKlLUyrpFhFzIuLQCSr7yIh47USULUlSM+OZJGk6ioiVEbHWKPY7MCKujohLImKjiPjlKMs/IiJWG+W+Z0fEzqPZV5Kk0bCfJkmaDLN6XYEh5gCHAh8dbmNEzMrM+8dScGYe3k3FJEnqgPFMktTP3gbslZm/r7+/YJTP+wDwMWDZhNRKkqT27KdJkibchCbdImJr4Ghg7frQ4cAVwIXAl4CXAmsC+2XmucDngDkRcSnwz8zcNiLOBi4FtgFujYhdgI8AL6ll/hQ4LDOXR8TxwH3A5sA84BzgLZm5rG67MDM/W0dXfriWsRz4S2a+YuKOhCRpOjOeSZIGTUR8DHg+sBpwC/DGzLwuIk4Fngh8IyIuAt5HiUvz6vNW1sdeAcwFDsnM70bE52rRv42IFcD2wArgWOBpwBrAL4GDMnP5JDVTkjSN2U+TJE1FE7a8ZETMAb4I7J6ZzwJ2pgS8OZTO13mZ+QzgSEowA3gLcHtmbpGZ2zYV9wTguZn5UuAAYAvgmfXfM+pjDVsDOwKbARsN2dbwnlrmMzPz6cD+3bdYktSPjGeSpAF1dGZuWePLKdQYl5mvBW4EdsvMPVo8987M3BLYC/h0fd5b6rZta3y8nZJwOyczt6LExEcDb5ywFkmS+ob9NEnSVDWR93TbFtgYOL2OIDkdWEmZXbc0M39U9zufMlKynZObpne/CDg+M5dl5jLga/WxhlMzc2nd/wTghcOUtzPwyfp8MvOWzpsnSRoQxjNJ0iDaKSLOj4g/Au+iXIAcrW/W/88H1o+INVrs9zLgkBpfLwaeBTxprBWWJA0U+2mSpClpIpeXnAFcnpnPa34wIhYA9zY9tHwU9Vg6vlWTJGnUjGeSpIESERsBnwC2zMxrI2Jb4OQOirgHoC7FBa3j4wxg18z8Szf1lSQNJPtpkqQpaSJnuv0W2DQiHripdkRsSQmKrdwJrBkR7YLhWcA+EbFqRKwK7AP8rGn7qyPikbWMvYBfDFPGj4B31DWWiYh5o2qRJGkQGc8kSYNmbWAZcFNEzATePE7lLgHWafr9B8C7I2IVKHEsIjYep9eSJPU3+2mSpClpwpJumXkbZbmQD0TEZRFxFXAEbYJfZt4KnAT8ISJ+22K3LwOXA5fUf5cDxzVt/z1wJnAVcH3df6ijgYXApXUK+hdH3TBJ0kAxnkmSBk1m/gH4NnAlcAFw7TgV/XHgFxFxab0XzzsoMxAui4g/AD8FNhin15Ik9TH7aZKkqWrGypUre12HcRMRxwMXZuZnJ+glFgDXnvS9vVl6180T9BIaJP++1xksWrSk19V4mPnzZ0/Jek00290/Zs6cwdy5a0FZ439hb2vTuUmIZ2BM0zgxlk0ttrv/TPeYNgkWYDyTpCl1TjZcXO6HeOZ1R01lU+k7oJV+PmdvZxDb3e9tHimmTeTykpIkSZIkSZIkSdJAGOlGotNKZu7b6zpIktQt45kkSZIkTS320yRJo+FMN0mSJEmSJEmSJKlLJt0kSZIkSZIkSZKkLpl0kyRJkiRJkiRJkrpk0k2SJEmSJEmSJEnq0qxeV2A62uOVX+91FdQnlt13T6+rIGnAGdPULWOZpKnAeCZp0HlO1j+MaRoLvwOkqcOk2xgsXryUFStW9roak2r+/NksWrSk19WYdIPabkmDY9Bi2qB+rw9quyUNjkGLZ50wBrTmsWnP49Oax0YTaRBj2iD+TQ1im/8/e/ceZtld1on+250mCZLm1mkZPSjNw+V1QDQwCWI0GjAiMJEDGuFIuGZELg4gAieMgMYjjoxEEG8DHMUAgwQQZSAEAnKTEVBCACPKy0UyM8qgnUBIh9y7a/7Yu6HIdHVX1a6qVbXX5/M8eXrX2muv9f4W1PrWb797rQ1j4faSAAAAAAAAMCNNNwAAAAAAAJiRphsAAAAAAADMSNMNAAAAAAAAZqTpBgAAAAAAADPaMXQBW9GuXccNXcIgdu/eOXQJgxjruG9926Nz1ZU3DF0GsM7GmGljPa/P27ivv/F6OQV83RjzbCXmLQPWkmNzeI7P0jbbsfG30fwYa6Zttt+pjTCvY3Y+Yuw03Vbh2Rc9Lldc889DlwHr6o8e/s4kAhLmnUxjq5JTwGLyDBg7fxvND5nGVud8xNi5vSQAAAAAAADMSNMNAAAAAAAAZqTpBgAAAAAAADPSdAMAAAAAAIAZaboBAAAAAADAjDTdAAAAAAAAYEaabgAAAAAAADCjHUMXAAAAwLhV1QuTnJFkb5IXJDm3u08ctioAAICVWdaVblX1sKr6+6r6eFXVSnZQVadW1QNXV97qVNX7q+r0jdwnAJufPAOATetZSU7p7lOGLgSAjWWeBsA8We6Vbk9K8kvd/aZV7OPUJMcledcqXgsAa0meAcCAqup1SSrJMUk+l+SsJG9NcmyS91TVRUnePlyFAAzAPA2AuXHEpltVvTTJKZOH9dQkX8zNJknd/ZXpJ1HOS/ItSY6aPr4oyZOTbK+q05Kc390vmn4a5Jwkt0hyIMnjuvtvquonk/xakmuTvGn6eOd0nVcnuWeSG5N0dz9iOQOsqvOSXJ/kbknukuRPk7wtya8k+Y4kL+3uly1nWwBsXfIMADaFZ3T35cnXbyl5dnefUlULSU7u7qur6tRBKwRgw5inATBvjth06+5nVtW9M7mn/gVVdfzNJ0lJnpvkqUne2t2/Pn3udtNQfHmS47r72dPld0/yB5ncOuSzVXVMkqOr6g5JXpnkftPlz1xUxo8luXV33+Pgtlc4znsm+ZFMQvmyJLdJ8sNJvi1JV9UfdvfVK9wmAFuIPAOATeGxVXVmkqOT3CrJZwauB4ABmacBMG+We3vJxZaaJP1Fkt+oqm9J8r7pf4fyo0ku7O7PJkl3X5/k+qq6f5JLDi5P8qokL5k+/mSSf11Vv5fk/Vn57UbeMt1Pqqqn+z+Q5J+q6itJ7pjk0yvcJgBbmzwDgA1UVackeUomV7TtrapHJfnZgcsCYHMxTwNgS9u+kpUXTZIe1N33SvL8TO69n+5+cyaXg38+k0+gvHatiuzuf8jkUyPvTnJakk9W1bEr2MR1ix7vP8TPq2k+ArBFyTMAGMRtk3w1yRXTKw/OGrgeADYR8zQA5sGKmm45zCSpqu6a5EvdfV4m9y2+7/SpqzK5rPqgdyV5SFXdbfq6Y6pqZ5K/SnKfqrrLdL3HLdr2HZPs7+63JHlmkt1Jbr/C2gHgIHkGABvvnZm8WfqZJB9Icsmw5QCwyZinAbDlrfSTFu9M8uhMJkmXZ3Jp98GQe0SSM6vqhiQLSZ4xXf5nmVwa/ol84wtNn5jkDVV1VCaf+Hhcd19aVU9OcmFVXZPkgky+vPSaTD7J8qLJd6bmqCS/3t1fXNWIAUCeAcCG6+4bkzxyiee2LXr8/iQnblBZAGwe5mkAbHnbFhYWhq7h66pqZ3fvmz5+QpJ/190/OHBZi+1J8oVnX/S4pvr+vgAAIABJREFUXHHNPw9dC6yrP3r4O7N3776hy9hQu3fvHN2Yk/kc9/bt27Jr13FJcudMvsh6Q22BPEtkGlvckXJqHs9ty2Hc82foTNsC9kSeAWyqOfyhcnkz5NkWmKftiUxjDix1Pprnv9kPZ4zjnvcxHynTNts9hZ9eVT+VSV1fTvLEgesBgNWQZwAAAJuLeRoA625TNd26+9eS/Npy1q2qhyT5j4d46he7+8I1LQwAVkCeAQAAbC7maQBshE3VdFuJacAJOQC2NHkGAACwuZinAbBa24cuAAAAAAAAALY6TTcAAAAAAACYkaYbAAAAAAAAzGjLfqfbkM79sVcPXQKsu+tvvH7oEoANINPYquQUsJg8A8bO30bzQ6ax1TkfMXaabqtwxRVX58CBhaHL2FC7d+/M3r37hi5jw4153FddecPQZQAbYGyZNubz+hjHDYzH2PJsJWTA0hybw3N8lubYsJ7GmGlj/J0a45hhLNxeEgAAAAAAAGak6QYAAAAAAAAz0nQDAAAAAACAGWm6AQAAAAAAwIw03QAAAAAAAGBGO4YuYCvateu4oUsYxO7dO4cuYRBjHffO2x6bfVdeN3QZwDobY6aN9bw+hnFfd+ONsgtGaox5thJjyIDVcmwOz/FZ2lDHxt8782+smTbG883YxnzD/puGLgE2hKbbKjzholfkX665augyYF29/eHPyb74Qx7mnUxjnsguGC95BoyFv3fmn0xjXr394c8ZugTYEG4vCQAAAAAAADPSdAMAAAAAAIAZaboBAAAAAADAjDTdAAAAAAAAYEaabgAAAAAAADAjTTcAAAAAAACYkaYbAAAAAAAAzGjH0AUMqapOTXJ0d79r6FoAYLXkGQAHVdULk5yRZG+SFyQ5t7tPPMJr9iS5uLuPX4d6Hp/k9O4+Y623DQCbmXkawDiN/Uq3U5M8cOgiAGBGp0aeATDxrCSndPcpQxcCACN3aszTAEZnU1/pVlULSZ6f5GFJdiV5YpLTkjwoyS2S/FR3//103bOTPGb60o8meVp3X11V5yS5R5Ljk3x7kk8lOSvJdyZ5cpLtVXVakvO7+0UbNDQARkSeAbDWqup1SSrJMUk+l0kmvDXJsUneU1UXJXn7ovX3JLk4yauT/GiSbUme2t0fvNl292TRVW+Lf66qb03yx0nuMF39z7v7mdOr2c5Mcm2Suyb5UpLHdPc/3Wzbj8+iq94W/1xVJyf53Uw+GHqLJC/s7tfPdJAA4DDM0wBYD1vhSrcru/ukJGcn+a9J/rK7753kNUmelyRV9eBMgu/kJPdKclQmt1I56JQkP93d35Xkq0le0N2XJnl5ktd09wmCD4B1Js8AWEvP6O4Tu/tembzBd/aiq9tO7u7nHOI1u5J8sru/J8nTkry+qo5ZwT7PTPL57r7XdL//36LnfjDJc7r7Hkk+kORlKxzP2Ule3N0nJPnuJO9Y4esBYDXM0wBYU1uh6faG6b+XJFno7gumP38sk09RJpNPoZzf3Vd190KSV06XHXRBd//z9PEfJnnAOtcMADcnzwBYS4+tqo9V1aVJHpXkhGW85oYk/yVJuvv9mVyZVivY50eSPLiqXlxVpye5etFz/627e/r4D7LyjHpfkudX1fOT3Le7r1zh6wFgNczTAFhTW6Hpdt303/1Jrl+0fH82+e0xAWAReQbAmqiqU5I8JcmDplecPT+T20quhZvyzfPEr2+3uz+c5N6ZvBH5mEwaZWu17d9K8tAke5P8TlW9cIXbBoDVME8DYE1thabbcvx5kkdW1c6q2pbkZ5K8e9Hz/7aqdk8fPyHJe6ePr0pym40rEwAOS54BsBy3zeT2VVdMbw951jJfd3QmV8UdbNzdMsmnb7bOl5LcoqoOfrr/UQefqKo7J7mqu89P8gtJ/k1VHZxT/kBV3W36eHFGLfa5JN9TVcdU1dFJzli07bt39+e7+xWZ3JryvsscEwCsN/M0AJZtLppu3f2OTG6T8uEkl04XL/5k5AeTnF9Vn05y+yS/Ol3+Z0lOqqpPVNVzN6peADgUeQbAMr0zyeeTfCaT70+7ZJmvuyLJCVX1N0l+P5Pvn7lh8QrdfVOSZyR5d1X9dSaf9D/o1CSXVNUnMvnOtSd394Hpc3+Z5Nyq+rtMbqv1jJvvvLs/kskbl5+a/vv3i55+elV9qqo+nsn3zT1vmWMCgHVlngbASmxbWFgYuoZ1VVXnJDmuu5+9Bpvbk+QLT7joFfmXa65ag83B5vX2hz8ne/fuG7qMDbV7987RjTmZz3Fv374tu3YdlyR3TnLZsNWsjTXOs0SmMYcWZ9c8ntuWw7jnz1plWlXtSXJxdx+/NpV907Yfn+T07j7jSOuugz2RZ8CIbIW5+qFyeR7naIn3HWEltsL5az3M81xlKfM+5iNl2lxc6QYAAAAAAABDmvsvBO3uc4auAQBmJc8AmEV3X5Zkza9ym277vCTnrce2AWAzM08D4OZc6QYAAAAAAAAz0nQDAAAAAACAGWm6AQAAAAAAwIw03QAAAAAAAGBGmm4AAAAAAAAwox1DF7AV/dGPPWnoEmDdXXfjjUOXAGwAmcY8kV0wXvIMGAt/78w/mca8umH/TUOXABtC020Vrrji6hw4sDB0GRtq9+6d2bt339BlbLgxj3vfldcNXQawAcaWaWM+r49x3MB4jC3PVkIGLM2xOTzHZ2mODetpjJk2xt+psY4ZxsDtJQEAAAAAAGBGmm4AAAAAAAAwI003AAAAAAAAmJGmGwAAAAAAAMxox9AFbEW7dh03dAmDGOuXXRr3+rnuxhuz78rr1n0/wNLGmGnO6+OxkWOWaTCsMebZSowxA5bLsTk8x2dpG3Vs/I0xPmPNtDGeb4x5/Th3MiRNt1U468K35F+u+drQZcCWd8EZZ2ZfBCAMSabB2pBpMCx5Bswrf2OMj0yD2Tl3MiS3lwQAAAAAAIAZaboBAAAAAADAjDTdAAAAAAAAYEaabgAAAAAAADAjTTcAAAAAAACYkaYbAAAAAAAAzEjTDQAAAAAAAGak6QYAAAAAAAAz2jHLi6vqhUnOSLI3yQuSnNvdJx7hNXuSXNzdx8+y7yW2/fgkp3f3GWu9bQDmm0wDAADYPMzRANiKZr3S7VlJTunuU9aiGAAYkEwDYMuoqodV1d9X1cerqlb42lOr6oHrVdsS+3x/VZ2+kfsEYMszRwNgy1nWlW5V9bokleSYJJ9LclaStyY5Nsl7quqiJG9ftP6eJBcneXWSH02yLclTu/uDN9vuniz69Mnin6vqW5P8cZI7TFf/8+5+5vRTJWcmuTbJXZN8Kcljuvufbrbtx2fRp08W/1xVJyf53UyajrdI8sLufv1yjgUAW5tMA2BOPCnJL3X3m1bx2lOTHJfkXWtaEQCsgjkaAPNkubeXfEZ3X558/dLus7v7lKpaSHJyd19dVafe7DW7knyyu581fe71VXWXFdR2ZpLPd/dp0/3ebtFzP5jkhO7uqvrlJC/L5HLz5To7yYu7+/VVtS3JbVbwWgC2NpkGwJZWVS9NcsrkYT01yRdzszcru/sr0yvgzkvyLUmOmj6+KMmTk2yvqtOSnN/dL5pehXZOJm8OHkjyuO7+m6r6ySS/lsmbj2+aPt45XefVSe6Z5MYk3d2PWGb95yW5PsndktwlyZ8meVuSX0nyHUle2t0vW+XhAWDrMUcDYG4st+n22Ko6M8nRSW6V5DPLeM0NSf5LknT3+6vq2kwmglctc58fSfLMqnpxkg9kMjk86L91d08f/0GSS5e5zYPel+T50zB+d3f/1QpfD8DWJdMA2NKmn8S/dybfbXNBVR1/8zcrkzw3yVOTvLW7f3363O2mzbiXJzmuu589XX73TDLolO7+bFUdk+ToqrpDklcmud90+TMXlfFjSW7d3fc4uO0VDuOeSX4kk2bgZZm8IfnDSb4tSVfVH3b31Ss9NgBsSeZoAMyNI36nW1WdkuQpSR7U3fdK8vxMLu9eCzfdrIavb7e7P5zk3kk+luQxmQTWWm37t5I8NJMvYv2d6cQUgDkn0wCYU4+tqo9V1aVJHpXkhOnyv0jyM1X1q1X1gCRXLvH6H01yYXd/Nkm6+/ru3pfk+5JccnB5klctes0nk/zrqvq9qvqpTK5cW4m3TPdzTZKe7v/A9PZdX0lyxxVuD4AtyBwNgHlzxKZbktsm+WqSK6afeDxrmds+OpMJ38EAvWWST99snS8luUVV3XX686MOPlFVd05yVXefn+QXkvybqjpY7w9U1d2mj5+Q5L2H2P/nknxPVR1TVUdn0WXgVXX37v58d78ik0vE77vMMQGwtck0AObK4d6s7O43Z3Ibys9ncuXba9dqv939D5lcrfbuJKcl+WRVreRN0usWPd5/iJ+Xe1cWALY2czQA5spymm7vzGSS9plMLre+ZJnbviLJCVX1N0l+P8lPd/cNi1fo7puSPCPJu6vqrzOZXB10apJLquoTSd6R5MndfWD63F8mObeq/i7JA6bb+Cbd/ZEkf57kU9N//37R00+vqk9V1ceTPC3J85Y5JgC2NpkGwLxZ8s3K6ZuMX+ru8zL5vrSDb/pdlW/+fpl3JXnIwTcYp28g7kzyV0nus+g7ch63aNt3TLK/u9+S5JlJdie5/doPD4A5Z44GwFw54qcHu/vGJI9c4rltix6/P8mJN3v+2Yd4zWVJjl/086vyzbcp+ZXp8j9K8kdLlPXV7v4/vsB0Opk8b9HPT16i7n+/xHYBmGMyDYA59M4kj87kzcrLM7ml5MHm2iOSnFlVNyRZyDfeNPyzTG5J+Ykk53f3i6rqiUneUFVHZfKm5OO6+9KqenKSC6vqmiQXJLkxyTWZXEH3oqpKJt/L9uvd/cX1Hy4A88QcDYB545YdAAAAW0x3n7rox6XerPyPSf7jIZZ/Id/43reDy96W5G2H2Mw7u/tNSVJVT0jy19MrAd4x/W/F9Xb345d6bvrznuVuFwAAYDNZl6bbzT9VssbbPi+LPlUCAOtJpgEwck+vqp/KZO745SRPHLgeAEbOHA2AzcyVbgAAABxSd/9akl9bzrpV9ZAc4sq6JL/Y3ReuaWEAAACbkKYbAAAAM5s21jTXAACA0do+dAEAAAAAAACw1Wm6AQAAAAAAwIw03QAAAAAAAGBGvtNtFV71kIcNXQLMhetuvHHoEmD0ZBqsDZkGw5JnwLzyN8b4yDSYnXMnQ9J0W4Urrrg6Bw4sDF3Ghtq9e2f27t03dBkbzriBeTe2TBvr+W2M4x7jmGHMxpZnK+F8uDTH5vAcn6U5NqynMWbaGH+njBnml9tLAgAAAAAAwIw03QAAAAAAAGBGmm4AAAAAAAAwI003AAAAAAAAmNGOoQvYinbtOm7oEgaxe/fOoUsYhHFvDdfdeFP2XXnt0GXAljPGTNtq57e1MsZxz8uYZRwc2RjzbCXm5Xy4Hhybw3N8lrZRx8bfAeMz1kwb4/nGmLcO52JWQtNtFX72wr/Mv1xz3dBlAIu85Ywfyb6hi4AtSKbB5ifj4MjkGTCv/B0wPjINNh/nYlbC7SUBAAAAAABgRppuAAAAAAAAMCNNNwAAAAAAAJiRphsAAAAAAADMSNMNAAAAAAAAZqTpBgAAAAAAADPSdAMAAAAAAIAZ7Ri6gMOpqhcmOSPJ3iQvSHJud584fe4pSZ6R5NokP9Td+1a47Ycl+WJ3//XaVg0A/yeZBgBHVlWnJjm6u981dC0AzD/zNADW2ma/0u1ZSU7p7lMO8dzTkzymu++90tCbeliS+85UHQAsn0wDgCM7NckDhy4CgNEwTwNgTW2KK92q6nVJKskxST6X5Kwkb01ybJL3VNVFSd6+aP03JLlLktdW1ceSPG76/K4kt0zy10me1N03VNXJSX43kwbjLZK8MMmXkzw0yWlV9TNJXtLdr9mIsQIw32QaAPOsqhaSPD+TNxJ3JXliktOSPCiTbPqp7v776bpnJ3nM9KUfTfK07r66qs5Jco8kxyf59iSfyiQvvzPJk5Nsr6rTkpzf3S/aoKEBMMfM0wDYKJvlSrdndPeJ3X2vTCZcZy/6hMnJ3f2cxSt39yOTfDHJGd19ZpL9SR41vfz7u5MclUl4JsnZSV7c3SdMn3tHd1+USbC+qLtPEHoArCGZBsC8u7K7T8okl/5rkr/s7nsneU2S5yVJVT04k4bbyUnulUmevWDRNk5J8tPd/V1JvprkBd19aZKXJ3nNNNM03ABYK+ZpAGyITXGlW5LHVtWZSY5Ocqskn1nh67cnefZ0YndUktsluWb63PuSPL+q7pLk3d39V2tUMwAcikwDYN69YfrvJUkWuvuC6c8fS/IT08cHr1S7Kkmq6pVJXrZoGxd09z9PH/9hkt9Z35IBGDnzNAA2xOBXulXVKUmekuRB00+bPD+TS7tX4lFJfjCTezDfK8nvH9xGd/9WJpdz703yO9MvSAWANSfTABiJ66b/7k9y/aLl+7N5PtgJAEnM0wDYWJthQnTbTG4nckVVHZNvXJq90m1c3t37quo2mQThxUlSVXfv7s8k+XxVXZ3JPZiT5Kokt5m5egD4BpkGABN/nuQ3quplSa5O8jNJ3r3o+X9bVbu7e2+SJyR573T5VUn+rw2tFIB5Z54GwIYZ/Eq3JO9M8vlMLuv+QCa3KFmp1yTZWVWfTvK2JB9c9NzTq+pTVfXxJE/L9DsGkrw2yaOq6hNV9dhVVw8A3yDTACBJd78jyX9J8uEkl04XL/7k/weTnD/Nu9sn+dXp8j9LctI00567UfUCMNfM0wDYMNsWFhaGrmEr2ZPkCz974V/mX6657kjrAhvoLWf8SPbu3TfTNnbv3jnzNraieRz39u3bsmvXcUly5ySXDVvNprUnMg22hJVk3Dye05djnsc9j5lWVeckOa67n70Gm9sTeQbMsbWY6260Q+XyPObZOtgTmQab0izn4nmeqyxl3sd8pEzbDFe6AQAAAAAAwJa2Gb7TDQAAgJHo7nOGrgEAAGA9uNINAAAAAAAAZqTpBgAAAAAAADPSdAMAAAAAAIAZaboBAAAAAADAjDTdAAAAAAAAYEY7hi5gK3rlQ35g6BKAm7nuxpuGLgG2JJkGm5+MgyOTZ8C88nfA+Mg02Hyci1kJTbdVuOKKq3PgwMLQZWyo3bt3Zu/efUOXseGMG5h3Y8u0sZ7fxjjuMY4ZxmxsebYSzodLc2wOz/FZmmPDehpjpo3xd8qYYX65vSQAAAAAAADMSNMNAAAAAAAAZqTpBgAAAAAAADPSdAMAAAAAAIAZaboBAAAAAADAjHYMXcBWtGvXcUOXMIjdu3cOXcIgjHu+XX/j/lx15TVDlwGDGWOmjeX8dnNjHPc8jlluwaGNMc9WYh7Ph2vFsTk8x2dpG3VsZP/4jDXTxni+Meb54VzNYppuq3DORV/Ml6/ZP3QZwBr47Yd/x9AlwKBkGmwtcgsOTZ4B80r2j49Mg63HuZrF3F4SAAAAAAAAZqTpBgAAAAAAADPSdAMAAAAAAIAZaboBAAAAAADAjDTdAAAAAAAAYEaabgAAAAAAADAjTTcAAAAAAACY0SBNt6paqKrjlrHeU6rq01X18aq6U1W9b5nbP6eqjl7muu+vqtOXsy4A47I4r6rqwqq6y/TxktlRVXeb5tbHq+rMjawXADZCVb1wOk/7YFWdWlUXL3pu8Rxu5yq2/bCquu/aVgzAPDFPA2Az2zF0AUfw9CSP6e6PTn++/zJf98tJzk1yw7pUBcDodPdDlrnqTyT5UHf/3HrWs5Sq2p5kobsXhtg/AKPwrCTf2d17q+rUmz138zncSj0sycVJ/nqG+gAYCfM0ADabwZtuVXVukh9OcnSSy5Oc1d3/varekOQuSV5bVR9L8rwkF3f38dPXLUyXPTzJriTP6e43V9XvTTf9oao6kOTUJAeSvCTJ9yQ5Nsn7kvxCd+/foGECsMVV1WVJTu/uv50uOq2qfinJ7ZO8sbt/cfqJyWcm2V5VP5DkJ5O8Z/HrDm4nkww+b9Eu7ppJrn0tyb+fLtuWSXad0N2frKqzp9vckeSfkjyxu79UVeckuWeS2yT5ziTfn+Qra3sEABibqnpdkkpyTJLPJTkryVszmVO9p6ouSvL2RevffA73uOnzu5LcMpNG2pO6+4aqOjnJ72Zy95VbJHlhki8neWgmGfszSV7S3a/ZiLECsDWZpwGw2WyG73R7UXef1N3fm+T1Sf5TknT3I5N8MckZ3b3UZd9XdfdJSR6T5Lenrzv4iZWTu/uE7r4yk4bbB7r7vklOSPKtmUwYAWC17pHk5Exy5cer6vTufl2Slyd5zTSDPr/Ui7v7E9N1Tkjy3CT/M8nruvsPFi2/IMmfJrm0qh6dyRuZ9+vu+yS5MMlvLtrk9yV5VHd/V3ebyAGwFp7R3Sd2972SfCrJ2d19yvS5k7v7OYtXPsQcbn8m2XRiku9OclS+MQ87O8mLp3n33Une0d0XZdLUe9E0CzXcAFgp8zQABjX4lW5JHlxVP5fkuKy8nvOn/34kybdX1bHdfd0h1ntokvtW1bOmP39Lkn9cVbUAMPHq7r4pydVVdX6SB2Qy+VqRqjohyX9O8sDuvnzR8n833eYDuvtAVT00yYlJLqmqZJKZX120qQsXvx4A1sBjp1cHHJ3kVkk+s8LXb0/y7Kp6cCYNt9sluWb63PuSPH/6PTzv7u6/WqOaARg38zQABjVo062q7pTkpUlO6u4vTG8x8scr2MR1SdLd+xcF26FsS/Kw7v6HWeoFgFW4Kd98ZfmxBx9U1R2T/EmSM7v7s4uWPzDJc5Kc0t3XThdvS/LC7n7VEvu5ek2rBmDUquqUJE/J5Iq2vVX1qCQ/u8LNPCrJD2aSZ/uq6heT3D1Juvu3quptSU5L8jtV9a7ufv4aDgEADsc8DYB1MfTtJW+d5IYkX5p+oeiT12i7+zK5X/JBb03y3Ko6Kkmq6viquvMa7QuAcXp0Ve2oqlsleUSS9y6x3ueSnJQkVfUjSe4wfXzrTD5x+R+6+0MHV66qeyV5RZKHdvfeRdt5a5KnVtXtpusdU1Xfu8ZjAoCDbpvJJ/WvqKpjsrrb8982yeXThtttMmnCJUmq6u7d/fnufkWSlyW57/Spq/LNczkAWAnzNAAGNeiVbt19aVW9KcnfJbk8k/se/9AabPo3k7y3qq5NcmqSn0/yG0k+WVULSa6fLvvCGuwLgHH6dJIP5Rtf0L3ULUtekOTVVfW0TCZ8/2O6/OFJKsnzqup502UvzuQT/8cleeP0Ku4keWR3v7aqjk/ygeny7Ul+P8kn13RUADDxziSPzuSWkpcn+Yt8ozG2XK9J8n9X1aeT/EuSDya55fS5p1fV/TP5EOb1SZ42Xf7aJOdV1U8leYnvdQNghczTABjUtoWFhaFr2Er2JPnCORd9MV++Zv/QtQBr4Lcf/h3Zu3dfkmT37p1ffzwm8zju7du3Zdeu45LkzkkuG7aaTWtPZBpsOYtz61Dm8Zy+HPM8bpl2RHsiz4A5dqTs34wOlcvybFn2RKbBlnS4c/U8z1WWMu9jPlKmDX17SQAAAAAAANjyNN0AAAAAAABgRppuAAAAAAAAMCNNNwAAAAAAAJiRphsAAAAAAADMSNMNAAAAAAAAZqTpBgAAAAAAADPaMXQBW9E5P/btQ5cArJHrb9w/dAkwKJkGW4vcgkOTZ8C8kv3jI9Ng63GuZjFNt1W44oqrc+DAwtBlbKjdu3dm7959Q5ex4YwbmHdjy7Sxnt/GOO4xjhnGbGx5thLOh0tzbA7P8VmaY8N6GmOmjfF3yphhfrm9JAAAAAAAAMxI0w0AAAAAAABmpOkGAAAAAAAAM9J0AwAAAAAAgBntGLqArWjXruOGLmEQu3fvHLqEQRj3/LvxxgO58sqvDV0GDGKMmTam89tiYxz3GMec/J/jlnOMwRjzbCXGej5cDsfm8ByfpW3EsZHh4zTWTBvj+caYx+NI43a+ny+abqvw/rd9Oddec2DoMoA18uBHHj90CTAYmQbzT84xBvIMmEcyfJxkGoyP8/18cXtJAAAAAAAAmJGmGwAAAAAAAMxI0w0AAAAAAABmpOkGAAAAAAAAM9J0AwAAAAAAgBlpugEAAAAAAMCMNN0AAAAAAABgRppuAAAAAAAAMKM1b7pV1UJVHTd9fGFV3WX6+P1VdfoSr7lbVX18+t+Za10TAKyXxbl3hPWeUlWfnmbdnarqfcvc/jlVdfQy110yawEYN/M0AMbCHA2AIe1Yz41390OWuepPJPlQd//cetazlKranmShuxeG2D8Ao/D0JI/p7o9Of77/Ml/3y0nOTXLDulQFwOiYpwFAEnM0ANbBujbdquqyJKd3999OF51WVb+U5PZJ3tjdvzj9xOQzk2yvqh9I8pNJ3rP4dQe3M633vEW7uGuS5yX5WpJ/P122Lcn3JDmhuz9ZVWdPt7kjyT8leWJ3f6mqzklyzyS3SfKdSb4/yVfW9ggAMCZVdW6SH05ydJLLk5zV3f+9qt6Q5C5JXltVH8skuy7u7uOnr1uYLnt4kl1JntPdb66q35tu+kNVdSDJqUkOJHlJJll3bJL3JfmF7t6/QcMEYIszTwNgLMzRANhoG/2dbvdIcnKSE5L8eFWd3t2vS/LyJK/p7hO6+/NLvbi7PzFd54Qkz03yP5O8rrv/YNHyC5L8aZJLq+rRmQTo/br7PkkuTPKbizb5fUke1d3f1d0mcgDM6kXdfVJ3f2+S1yf5T0nS3Y9M8sUkZ3T3Urfnuqq7T0rymCS/PX3dwSsLTp7m3JWZTOY+0N33zSRPvzXJWes2IgDGwDwNgHlljgbAhlrXK90O4dXdfVOSq6vq/CQPyGTytSJVdUKS/5zkgd19+aLl/266zQd094GqemiSE5NcUlXJZLxfXbSpCxe/HgBm9OCq+rkkx2XlGXv+9N+PJPn2qjq2u687xHoPTXLfqnrW9OdvSfKPq6oWACbM0wCYV+ZoAGyojW5PLTOsAAASvklEQVS6LddN+ear8I49+KCq7pjkT5Kc2d2fXbT8gUmek+SU7r52unhbkhd296uW2M/Va1o1AKNVVXdK8tIkJ3X3F6rq5CR/vIJNXJck3b1/0RuQh7ItycO6+x9mqRcAVsE8DYAtwxwNgCFs9O0lH11VO6rqVkkekeS9S6z3uSQnJUlV/UiSO0wf3zqTT1z+h+7+0MGVq+peSV6R5KHdvXfRdt6a5KlVdbvpesdU1feu8ZgAIElunckXaX+pqrYnefIabXdfJt9rc9Bbkzy3qo5Kkqo6vqruvEb7AmCczNMAmEfmaABsuI2+0u3TST6Ub3xB91K3LHlBkldX1dMymfD9j+nyhyepJM+rqudNl704yWmZXCb+xuknT5Lkkd392qo6PskHpsu3J/n9JJ9c01EBMHrdfWlVvSnJ32XyBd0XJvmhNdj0byZ5b1Vdm8mXdP98kt9I8snpl3tfP132hTXYFwDjZJ4GwNwxRwNgCNsWFhaGrmEr2ZPkC+9/25dz7TUHhq4FWCMPfuTx2bt3X3bv3pm9e/cNXc6Gm8dxb9++Lbt2HZckd05y2bDVbFp7ItNgFA7m3Dybxyw7SKYd0Z7IM2BObdUMP1Quy7Nl2ROZBqO0Vc/3S5nn+Vly5Ezb6NtLAgAAAAAAwNzRdAMAAAAAAIAZaboBAAAAAADAjDTdAAAAAAAAYEaabgAAAAAAADAjTTcAAAAAAACYkaYbAAAAAAAAzGjH0AVsRaf++O2HLgFYQzfeeGDoEmAwMg3mn5xjDOQZMI9k+DjJNBgf5/v5oum2CldccXUOHFgYuowNtXv3zuzdu2/oMjaccQPzbmyZNtbz2xjHPcYxJ+MdN4wtz1bCeWFpjs3hOT5Lc2xYT2PMtDH+ThnzeIx13GPm9pIAAAAAAAAwI003AAAAAAAAmJGmGwAAAAAAAMxI0w0AAAAAAABmtGPoAraiXbuOG7qEQezevXPoEgZh3OOy2nHvv+FAvvzVr61xNbD+xphpzm/jMcYxJ6sbtxxjqxtjnq3EWM+Hy+HYHJ7js7SbHxtZyloZa6aN8XxjzONhjjYumm6r8I+v2pubrto/dBnAJrLn5//V0CXAqsg0IJFjbH3yDBiaLGWtyDQgkStbmdtLAgAAAAAAwIw03QAAAAAAAGBGmm4AAAAAAAAwI003AAAAAAAAmJGmGwAAAAAAAMxI0w0AAAAAAABmpOkGAAAAAAAAM9J0AwAAAAAAgBnt2MidVdXDkvx6kuuS/D/d3YdY58Qkz+zuM5fYxtFJ3pLkjkne093PXMeSAeCQZBoA80CeATAvZBoAm8GGNt2SPCnJL3X3m5ZaobsvTrJU8O1Icu8kd+rue65PiQCwLDINgHkgzwCYFzINgMFtWNOtql6a5JTJw3pqki8mqSTHJPlckrO6+ytVdWqSc7v7xKrak+TiJOcleUCSVyd5WpJvr6pPZPLplQcnubi7f3e6n/MO/lxVFy8a479K8uEkvzLd3kF3TfK87n7Z+owcgHkj0wCYB/IMgHkh0wDYLDbsO92ml2NfnOTp3X3/JM/o7hO7+15JPpXk7CVeuivJR7v7PtOA+pkkf9fdJ3T3G46wzxO7+4QkD03ytST/qbs/MX3tCUmem+R/JnndmgwSgFGQaQDMA3kGwLyQaQBsFht9e8nFHltVZyY5OsmtknxmifWuS/LG1e6kqm6T5G1J/t/u/sii5Sck+c9JHtjdl692+wAQmQbAfJBnAMwLmQbAIDbsSrfFquqUJE9J8qDpJ06en+TYJVb/WncvHGZzN+Wbx/H17VTVLZK8Ocmru/vNi5bfMcmfJDmzuz+7ulEAgEwDYD7IMwDmhUwDYEiDNN2S3DbJV5NcUVXHJDlrhm19LslJSVJV35bk/ouee2WST3f3Sw4uqKpbJ7kgyX/o7g/NsF8ASGQaAPNBngEwL2QaAIMZ6vaS70zy6Ewu7b48yV8kue8qt/X/J/mTqvq76fb+Kkmq6k5JHp/kb6dffpok70vyiUy+SPV5VfW86fIXd7f7KwOwGjINgHkgzwCYFzINgMFsW1g43BXU3MyeJF/4x1ftzU1X7R+6FmAT2fPz/yp79+4buoxV2b1755atfSnbt2/Lrl3HJcmdk1w2bDWb1p7INGBqK+dYMp9ZdpBMO6I9kWfAJrDVs3QtHSqX5dmy7IlMA6a2cq7M8/wsOXKmDXV7SQAAAAAAAJgbmm4AAAAAAAAwI003AAAAAAAAmJGmGwAAAAAAAMxI0w0AAAAAAABmpOkGAAAAAAAAM9oxdAFb0R3P2j10CcAms/+GA0OXAKsi04BEjrH1yTNgaLKUtSLTgESubGWabqtwxRVX58CBhaHL2FC7d+/M3r37hi5jwxn3uIx13Izb2DJtrL/nYxz3GMecjHfcMLY8WwnnhaU5Nofn+CzNsWE9jTHTxvg7ZczjMdZxj5nbSwIAAAAAAMCMNN0AAAAAAABgRppuAAAAAAAAMCNNNwAAAAAAAJiRphsAAAAAAADMaNvCwsLQNWwle5J8YegiAObd/htuype/eu2qX799+7bs2nVcktw5yWVrVNa82ROZBrCuZs2zRKYtw57IMxidtTi/zmL37p3Zu3ffYPvf7A51fOTZsuyJTANYd+v9vuOOVW95xPa+6pIc2Hf90GUAzK07POP7hy5hNGQawPqRZxtHnsG4OL8yz2QawPpa778j3F4SAAAAAAAAZqTpBgAAAAAAADPSdAMAAAAAAIAZaboBAAAAAADAjDTdAAAAAAAAYEaabgAAAAAAADAjTTcAAAAAAACY0aZsulXVQlUdN318YVXdZeiaAGCl5BkA80KmATAvZBoA62nH0AUcSXc/ZCP2U1U7uvumjdgXAOMjzwCYFzINgHkh0wBYaxvSdKuq70vyoiS3ni76pe5+e1WdnuScJLdIciDJ47r7b2722suSnN7df1tV70/yiSQnJ7l9kjd29y9O1/vlJD+d5LokC0nu391XHmbfe5JcnOS8JA9I8sokL1/rsQMwP+QZAPNCpgEwL2QaAJvJujfdquq2mYTKQ7r7f1XVtyX5aFX9RJI/SHJKd3+2qo5JcvQyNnmPTMLv2CQfrqoPJflQkmcm+bbuvraqdia59jD7/u7ptnYl+Wh3P3sNhwzAHJJnAMwLmQbAvJBpAGw2G3Gl28lJ7pzkHVV1cNlCkgcnubC7P5sk3X19kuuXsb1XTy/Hvrqqzs/k0yLvSPK5JK+pqncluaC791XVUvu+a5LLM/l0yhtnHyIAIyDPAJgXMg2AeSHTANhUNqLpti3J33T3Dy1eWFU/l+ROa7GD7t5fVfdL8gOZhOHHqupBS+17uv89Sb7W3QtrUQMAc0+eATAvZBoA80KmAbCpbN+AfXwoyd2q6v4HF1TVSUneleQhVXW36bJjppdnH8mjq2pHVd0qySOSvHf6ut3d/YHu/uUkf5vku5fad1VtW7PRATAW8gyAeSHTAJgXMg2ATWXdr3Tr7q9U1UOTvLiqfiuT+yf/Q5IfT/LEJG+oqqOS7E/yuCSXHmGTn84k1A5+oekFVXXHJG+uqltm0ki8JMmfdvd1h9k3ACybPANgXsg0AOaFTANgs9m2sLB1rnKuqvcnObe7LxiohD1JvrD3VZfkwL7l3AYagNW4wzO+P3v37lv167dv35Zdu45LJvfXv2yNylozmyDPEpkGsO5mzbNEpi3DnsgzGJ21OL/OYvfunYPuf7M71PHZ7HmWyDSAsVjv9x034vaSAAAAAAAAMNfW/faSa6m7Tx26BgCYlTwDYF7INADmhUwDYC240g0AAAAAAABmpOkGAAAAAAAAM9J0AwAAAAAAgBlpugEAAAAAAMCMNN0AAAAAAABgRjuGLmAr2n3WfYYuAWCu7b/hpqFLGA2ZBrB+5NnGkWcwLs6vzDOZBrC+1vvvCE23Vbjiiqtz4MDC0GVsqN27d2bv3n1Dl7HhjHtcjJsxGlumjfX/72Mc9xjHnBg34zW2PFsJvx9Lc2wOz/GBYYwx08Z4vjHm8RjjuMc45sU03VbmqCTZvn3b0HUMwrjHxbjHZd7GvWg8Rw1ZxyY32kwb45iTcY57jGNOjHveyLQjGm2erYTjszTH5vAcn6U5Nod38+Mjz5Zl1Jk2xnEb83iMcdzzPOYjZdq2hYVxfXJiRj+Y5INDFwHAsp2S5L8NXcQmJdMAthaZdmjyDGBrkWdLk2kAW8shM03TbWWOSXJSkv+VZP/AtQCwtKOSfFuSjya5fuBaNiuZBrA1yLTDk2cAW4M8OzKZBrA1HDbTNN0AAAAAAABgRtuHLgAAAAAAAAC2Ok03AAAAAAAAmJGmGwAAAAAAAMxI0w0AAAAAAABmpOkGAAAAAAAAM9J0AwAAAAAAgBlpugEAAAAAAMCMNN0AAAAAAABgRjuGLmCrqKq7J3l1kl1Jrkjy2O7+7LBVra+q2pXktUnukuSGJJ9N8qTu3jtoYRuoqn45yTlJ7tXdfztwOeuuqo5N8tIkpyW5LsmHu/tnh61q/VXV6Ul+Ncm26X+/0t1/OmxVa6+qzk3yk0n2ZNH/p8d4fhu7Mf5vPvZMk2fzn2eybHznNSb8b/8Nh8u6qrpfklckuWWSy5I8urv/Zahah3TzTHRsJpbKTr9jS2fsGI/NanJ4jMdpNcZ4nMzRzNHM0bY+87NDc6Xb8r08ye91992T/F4mf5TPu4Ukv9Hd1d33SvL5JC8auKYNU1X3SXK/JP996Fo20G9kEnx3n/5v/oKB61l3VbUtkz/yHtP9v9u7n1cp6yiO4+8yqCD6aRZmKf3wJG7E3BRRq2pT9GNhSOU66Q+oiBBaRNCuImoTCIJQENYmapOEQUFRCzenAk2tsMw2hUblbTGPebvO3Caneb455/3azOVZHc53nu/nHr4zz+Q64BFgW0TM4v64E7iNU9/TFfe36iquedlMM89mP8/MMqDmvqYB1/6koVnX7QXbgce6Pn1AkQxcaGEm2pu/GZWdpe+xf8jYir05nRyu2KfTUbFPzmjOaDOr0IzmfDbErC3yVETEMmA9sKO7tANYHxGXt6tq+jLzSGbumnfpI2Blo3J6FRHnMtgQtrSupS8RcQGwGXg6M+cAMvNQ26p6cxy4qPv7YuC7zDzesJ6pyMzdmXlg/rWq+1tlVde8aqaZZ6XyzCwrtq/JtV9okay7CTiWmbu7668AG3sur7kRmWhvGJ2d3mN/OSVjgaUU7M2/zWHfQ+Op2idnNGe0tlX1YuZnNOez4Tx0G8/VwDeZ+QdA9/ptd72E7hR+C/B261p68gywPTP3tS6kR9cx+Lrv1oj4JCJ2RcStrYuati7sNwJvRcTXDD6hsbltVb0qv78VVH7Ni2WaeVYgz8wy97XCXPsRFmTdNcz79HFmHgbOjohLG5XXyrBMtDcDo7Kz/D22SMaW7808i/XCPo2nfJ+c0WaeM1qtGa38nuahm8b1IvAz8FLrQqYtIm4GNgAvt66lZ0uAa4HPMnMD8DjwZkRc2Las6YqIc4AngXszcyVwD/B69ykcSbOpRKaZZ3XyzCyTNESJrBtX4Uwc19DsBMrnyKiMxd5I/7USuVU4j5zRnNFK8dBtPAeAqyJiCUD3ury7PvO6H0S8AXhw1r4CO8LtwBpgb0TsA1YA70bEnS2L6sF+4He6r/5m5sfAYWB1y6J6sA5YnpkfAnSvvzB4D1RQen8rqvSaF8s084wyeWaWFd7XinPthxiSdfuZ97iuiFgKHM/MI41KbGFoJgLXY29gdHYexXtsVMYew96csNhe7D49ntJ9ckZzRptRlWe00nsaeOg2lsz8Hvgc2NRd2sTgZP6HdlX1IyKeZfCc+/sy89fW9fQhM5/LzOWZuSozVwEHgbsy873GpU1V9yiV94E7ACJiNbAM+KplXT04CKyIiACIiDXAFQx+wHfmVd7fqqq85tUyzTwrlWdmWdF9rTrX/lQjsu5T4Px5j3F6FHijRX2tjMpE4HmK9wYWzc4v8B4blbFfYm+Axfdi9+nxVO6TM5ozWsu6pqzsjFZ5TzvhrLm5udY1nBEi4kZgG3AJ8BOwOTOzbVXTFRFrgT0M/tE+2l3em5n3t6uqf90nT+7OzD2NS5m6iLgWeA24DPgNeCoz32lb1fRFxEPAEwx+4BRga2bubFjSVETEC8ADwJUMPlH0Y2aurbi/VVdxzc0082zW88wsq7evacC1P2mxrIuIW4BXgfOAfcDDmXmoSaH/A/Mz0d4MjMpO77HRGVuxN6eTwxX7dDoq9skZzRnNGe3M53w2nIdukiRJkiRJkiRJ0oR8vKQkSZIkSZIkSZI0IQ/dJEmSJEmSJEmSpAl56CZJkiRJkiRJkiRNyEM3SZIkSZIkSZIkaUIeukmSJEmSJEmSJEkT8tBNkiRJkiRJkiRJmpCHbpIkSZIkSZIkSdKE/gS7JvtlIY7XDQAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 2160x504 with 4 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "2tZnK7qr5USJ",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        ""
      ],
      "execution_count": 0,
      "outputs": []
    }
  ]
}